git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 2/3] attr: make sure we have an xdg path before using it

From
Jeff King <peff@peff.net>
Date
Jul 24, 2012, 11:53 UTC
Message-ID
<20120724115357.GA7353@sigill.intra.peff.net>
In-Reply-To
<20120724115305.GA7328@sigill.intra.peff.net>

If we don't have a core.attributesfile configured, we fall back to checking XDG config. This is usually $HOME/.config/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>
---
[oops, resending because I forgot to cc git@vger]

This is another instance of Matthieu's e3ebc35 (config: fix several access(NULL) calls, 2012-07-12). I guess it wasn't caught because of the lack of a test without HOME set (I found it because t5541 can trigger it in a very roundabout way).

 attr.c               | 12 +++++++-----
 t/t1306-xdg-files.sh |  6 ++++++
 2 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/attr.c b/attr.c
index aef93d8..b52efb5 100644
--- 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) {
diff --git a/t/t1306-xdg-files.sh b/t/t1306-xdg-files.sh
index 3c75c3f..1569596 100755
--- a/t/t1306-xdg-files.sh
+++ b/t/t1306-xdg-files.sh
@@ -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 &&
-- 
1.7.11.3.4.g9f70dbb
Previous: Jeff KingNext: Matthieu Moy
Message 2 of 7 in “test-lib.sh: unset XDG_CONFIG_HOME”
  1. 1/3 test-lib.sh: unset XDG_CONFIG_HOMEJeff King, Jul 24, 2012
  2. 2/3 attr: make sure we have an xdg path before using itJeff King, Jul 24, 2012
  3. ignore: make sure we have an xdg path before using itMatthieu Moy, Jul 24, 2012
  4. Jeff KingJul 24, 2012
  5. 3/3 t1306: check that XDG_CONFIG_HOME worksJeff King, Jul 24, 2012
  6. Matthieu MoyJul 24, 2012
  7. Jeff KingJul 24, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.