02e5ba4ae6
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>
38 lines
654 B
Bash
Executable File
38 lines
654 B
Bash
Executable File
#!/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
|