Browse Source
The config parsing routines use the static global 'config_file' to store the FILE* pointing to the current config file being parsed. The function get_next_char() automatically converts an EOF on this file to a newline for the convenience of its callers, and it sets config_file to NULL to indicate that EOF was reached. This throws away useful information, though, since some routines want to call ftell on 'config_file' to find out exactly _where_ the routine ended. In the case of a key ending at EOF boundary, we ended up segfaulting in some cases (changing that key or adding another key in its section), or failing to provide the necessary newline (adding a new section). This patch adds a new flag to indicate EOF and uses that instead of setting config_file to NULL. It also makes sure to add newlines where necessary for truncated input. All three included tests fail without the patch. Signed-off-by: Junio C Hamano <gitster@pobox.com>maint


2 changed files with 46 additions and 5 deletions
@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
|
||||
#!/bin/sh |
||||
|
||||
test_description='Test wacky input to git config' |
||||
. ./test-lib.sh |
||||
|
||||
setup() { |
||||
(printf "[section]\n" && |
||||
printf " key = foo") >.git/config |
||||
} |
||||
|
||||
check() { |
||||
echo "$2" >expected |
||||
git config --get "$1" >actual |
||||
git diff actual expected |
||||
} |
||||
|
||||
test_expect_success 'modify same key' ' |
||||
setup && |
||||
git config section.key bar && |
||||
check section.key bar |
||||
' |
||||
|
||||
test_expect_success 'add key in same section' ' |
||||
setup && |
||||
git config section.other bar && |
||||
check section.key foo && |
||||
check section.other bar |
||||
' |
||||
|
||||
test_expect_success 'add key in different section' ' |
||||
setup && |
||||
git config section2.key bar && |
||||
check section.key foo && |
||||
check section2.key bar |
||||
' |
||||
|
||||
test_done |
Loading…
Reference in new issue