Browse Source

config.c: Escape backslashes in section names properly

If an element of the configuration key name other than the first or last
contains a backslash, it is not escaped on output, but is treated as an
escape sequence on input. Thus, the backslash is lost when re-loading
the configuration.

This patch corrects this by having backslashes escaped properly, and
introduces a new test for this bug.

Signed-off-by: Bryan Donlan <bdonlan@fushizen.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Bryan Donlan 17 years ago committed by Junio C Hamano
parent
commit
e5c349ba11
  1. 2
      config.c
  2. 6
      t/t1303-wacky-config.sh

2
config.c

@ -680,7 +680,7 @@ static int store_write_section(int fd, const char* key) @@ -680,7 +680,7 @@ static int store_write_section(int fd, const char* key)
if (dot) {
strbuf_addf(&sb, "[%.*s \"", (int)(dot - key), key);
for (i = dot - key + 1; i < store.baselen; i++) {
if (key[i] == '"')
if (key[i] == '"' || key[i] == '\\')
strbuf_addch(&sb, '\\');
strbuf_addch(&sb, key[i]);
}

6
t/t1303-wacky-config.sh

@ -34,4 +34,10 @@ test_expect_success 'add key in different section' ' @@ -34,4 +34,10 @@ test_expect_success 'add key in different section' '
check section2.key bar
'

SECTION="test.q\"s\\sq'sp e.key"
test_expect_success 'make sure git-config escapes section names properly' '
git config "$SECTION" bar &&
check "$SECTION" bar
'

test_done

Loading…
Cancel
Save