From: Bryan Donlan Date: Sun, 4 May 2008 05:37:52 +0000 (-0400) Subject: config.c: Escape backslashes in section names properly X-Git-Tag: v1.5.6-rc0~57^2~8 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=e5c349ba112fc53832c757cef122297718d3a175;p=git.git 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 Signed-off-by: Junio C Hamano --- diff --git a/config.c b/config.c index b0ada515b..f0ac4569a 100644 --- a/config.c +++ b/config.c @@ -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]); } diff --git a/t/t1303-wacky-config.sh b/t/t1303-wacky-config.sh index 99985dcd7..f366b53fb 100755 --- a/t/t1303-wacky-config.sh +++ b/t/t1303-wacky-config.sh @@ -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