Commit 8a765c72a850641b35c6ee7800524664920b7496

Colin Stolley 2022-05-19T16:33:57

midx: fix large object offset table check. It's insufficient to only check if the offset high order bit is set, we must also check to see if object_large_offsets are in use. This bug is causing objects to appear missing because they can't be found in the index.

1
2
3
4
5
6
7
8
9
10
11
12
13
diff --git a/src/libgit2/midx.c b/src/libgit2/midx.c
index d4e53c4..b2f2261 100644
--- a/src/libgit2/midx.c
+++ b/src/libgit2/midx.c
@@ -431,7 +431,7 @@ int git_midx_entry_find(
 
 	object_offset = idx->object_offsets + pos * 8;
 	offset = ntohl(*((uint32_t *)(object_offset + 4)));
-	if (offset & 0x80000000) {
+	if (idx->object_large_offsets && offset & 0x80000000) {
 		uint32_t object_large_offsets_pos = offset & 0x7fffffff;
 		const unsigned char *object_large_offsets_index = idx->object_large_offsets;