config: don't segfault when given --path with a missing value
authorCarlos Martín Nieto <cmn@elego.de>
Thu, 15 Nov 2012 18:10:01 +0000 (10:10 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 16 Nov 2012 02:12:17 +0000 (18:12 -0800)
When given a variable without a value, such as '[section] var' and
asking git-config to treat it as a path, git_config_pathname returns
an error and doesn't modify its output parameter. show_config assumes
that the call is always successful and sets a variable to indicate
that vptr should be freed. In case of an error however, trying to do
this will cause the program to be killed, as it's pointing to memory
in the stack.

Detect the error and return immediately to avoid freeing or accessing
the uninitialed memory in the stack.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/config.c
t/t1300-repo-config.sh

index 8cd08da99122bc79025d2a78204d316f1b7ba478..a8cf1af88841b2c52cf4f84b0d7c67a17dc1fe85 100644 (file)
@@ -129,7 +129,8 @@ static int show_config(const char *key_, const char *value_, void *cb)
                else
                        sprintf(value, "%d", v);
        } else if (types == TYPE_PATH) {
-               git_config_pathname(&vptr, key_, value_);
+               if (git_config_pathname(&vptr, key_, value_) < 0)
+                       return -1;
                must_free_vptr = 1;
        } else if (value_) {
                vptr = value_;
index a477453e2ef8ffedafb2dd05e00f507cd112bc97..17272e04295c7edf242a68bfb5942b478604ef6e 100755 (executable)
@@ -803,6 +803,11 @@ test_expect_success NOT_MINGW 'get --path copes with unset $HOME' '
        test_cmp expect result
 '
 
+test_expect_success 'get --path barfs on boolean variable' '
+       echo "[path]bool" >.git/config &&
+       test_must_fail git config --get --path path.bool
+'
+
 cat > expect << EOF
 [quote]
        leading = " test"