attr: make sure we have an xdg path before using it
authorJeff King <peff@peff.net>
Tue, 24 Jul 2012 11:53:57 +0000 (07:53 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 24 Jul 2012 15:59:07 +0000 (08:59 -0700)
If we don't have a core.attributesfile configured, we fall
back to checking XDG config, which is usually
$HOME/.config/git/attributes.

However, if $HOME is unset, then home_config_paths will return
NULL, and we end up calling fopen(NULL).

Depending on your system, this may or may not cause the
accompanying test to fail (e.g., on Linux and glibc, the
address will go straight to open, which will return EFAULT).
However, valgrind will reliably notice the error.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
attr.c
t/t1306-xdg-files.sh

diff --git a/attr.c b/attr.c
index aef93d896f7e72ec534c0c2c576e418bedc5cb30..b52efb55a036be10618d531d66697d7f7220c524 100644 (file)
--- a/attr.c
+++ b/attr.c
@@ -520,11 +520,13 @@ static void bootstrap_attr_stack(void)
                home_config_paths(NULL, &xdg_attributes_file, "attributes");
                git_attributes_file = xdg_attributes_file;
        }
-       elem = read_attr_from_file(git_attributes_file, 1);
-       if (elem) {
-               elem->origin = NULL;
-               elem->prev = attr_stack;
-               attr_stack = elem;
+       if (git_attributes_file) {
+               elem = read_attr_from_file(git_attributes_file, 1);
+               if (elem) {
+                       elem->origin = NULL;
+                       elem->prev = attr_stack;
+                       attr_stack = elem;
+               }
        }
 
        if (!is_bare_repository() || direction == GIT_ATTR_INDEX) {
index 3c75c3f2e7e8f980a83fa05db24cf64e7b1cd5a3..1569596ab3beee2cecb14349f7676faa4c6ee02e 100755 (executable)
@@ -106,6 +106,12 @@ test_expect_success 'Checking attributes in the XDG attributes file' '
        test_cmp expected actual
 '
 
+test_expect_success 'Checking XDG attributes when HOME is unset' '
+       >expected &&
+       (sane_unset HOME &&
+        git check-attr -a f >actual) &&
+       test_cmp expected actual
+'
 
 test_expect_success 'Checking attributes in both XDG and local attributes files' '
        echo "f -attr_f" >.gitattributes &&