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

[PATCH 2/2] sha1_file: fix iterating loose alternate objects

From
Jonathon Mah <me@jonathonmah.com>
Date
Feb 1, 2015, 21:55 UTC
Message-ID
<50251CB8-0885-40FF-A7C9-9C9460266E14@jonathonmah.com>
In-Reply-To
<BF4AA771-DEB5-4DED-9C74-768036C1E2DD@jonathonmah.com>

The string in 'base' contains a path suffix to a specific object; when its value is used, the suffix must either be filled (as in stat_sha1_file, open_sha1_file, check_and_freshen_nonlocal) or cleared (as in prepare_packed_git) to avoid junk at the end. loose_from_alt_odb (introduced in 660c889e46d185dc98ba78963528826728b0a55d) did neither and treated 'base' as a complete path to the "base" object directory, instead of a pointer to the "base" of the full path string.

The trailing path after 'base' is still initialized to NUL, hiding the bug in some common cases. Additionally the descendent for_each_file_in_obj_subdir function swallows ENOENT, so an error only shows if the alternate's path was last filled with a valid object (where statting /path/to/existing/00/0bjectfile/00 fails).

Signed-off-by: Jonathon Mah <me@JonathonMah.com>
---
 sha1_file.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/sha1_file.c b/sha1_file.c
index 30995e6..fcb1c4b 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -3396,9 +3396,13 @@ static int loose_from_alt_odb(struct alternate_object_database *alt,
 			      void *vdata)
 {
 	struct loose_alt_odb_data *data = vdata;
-	return for_each_loose_file_in_objdir(alt->base,
-					     data->cb, NULL, NULL,
-					     data->data);
+	int r;
+	alt->name[-1] = 0;
+	r = for_each_loose_file_in_objdir(alt->base,
+					  data->cb, NULL, NULL,
+					  data->data);
+	alt->name[-1] = '/';
+	return r;
 }
 
 int for_each_loose_object(each_loose_object_fn cb, void *data)
-- 
2.3.0.rc2.2.g184f7a0
Previous: Jonathon MahNext: Jeff King
Message 2 of 5 in “t5710-info-alternate: demonstrate bug in unpacked pruning”
  1. 1/2 t5710-info-alternate: demonstrate bug in unpacked pruningJonathon Mah, Feb 1, 2015
  2. 2/2 sha1_file: fix iterating loose alternate objectsJonathon Mah, Feb 1, 2015
  3. Jeff KingFeb 2, 2015
  4. Jonathon MahFeb 2, 2015
  5. Jeff KingFeb 2, 2015

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.