git/t/t1303-wacky-config.sh
Thomas Jarosch e0b3cc0dff Fix buffer overflow in config parser
When interpreting a config value, the config parser reads in 1+ space
character(s) and puts -one- space character in the buffer as soon as
the first non-space character is encountered (if not inside quotes).

Unfortunately the buffer size check lacks the extra space character
which gets inserted at the next non-space character, resulting in
a crash with a specially crafted config entry.

The unit test now uses Java to compile a platform independent
.NET framework to output the test string in C# :o)

    Read: Thanks to Johannes Sixt for the correct printf call
    which replaces the perl invocation.

Signed-off-by: Thomas Jarosch <thomas.jarosch@intra2net.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2009-04-17 20:59:01 -07:00

51 lines
1.0 KiB
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 2>&1
test_cmp 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
'
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
'
LONG_VALUE=$(printf "x%01021dx a" 7)
test_expect_success 'do not crash on special long config line' '
setup &&
git config section.key "$LONG_VALUE" &&
check section.key "fatal: bad config file line 2 in .git/config"
'
test_done