]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-bitmap: fix memory leak if `load_bitmap_entries_v1` failed
authorLidong Yan <502024330056@smail.nju.edu.cn>
Mon, 12 May 2025 12:22:10 +0000 (12:22 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 12 May 2025 17:58:35 +0000 (10:58 -0700)
In pack-bitmap.c:load_bitmap_entries_v1, the function `read_bitmap_1`
allocates a bitmap and reads index data into it. However, if any of
the validation checks following the allocation fail, the allocated bitmap
is not freed, resulting in a memory leak. To avoid this, the validation
checks should be performed before the bitmap is allocated.

Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
pack-bitmap.c

index b9f1d866046bad5aae856989201d9d3bd03a9687..ac6d62b980c5a8d086bb1b71f46df721d11b3ad4 100644 (file)
@@ -388,10 +388,6 @@ static int load_bitmap_entries_v1(struct bitmap_index *index)
                        return error(_("corrupt ewah bitmap: commit index %u out of range"),
                                     (unsigned)commit_idx_pos);
 
-               bitmap = read_bitmap_1(index);
-               if (!bitmap)
-                       return -1;
-
                if (xor_offset > MAX_XOR_OFFSET || xor_offset > i)
                        return error(_("corrupted bitmap pack index"));
 
@@ -402,6 +398,10 @@ static int load_bitmap_entries_v1(struct bitmap_index *index)
                                return error(_("invalid XOR offset in bitmap pack index"));
                }
 
+               bitmap = read_bitmap_1(index);
+               if (!bitmap)
+                       return -1;
+
                recent_bitmaps[i % MAX_XOR_OFFSET] = store_bitmap(
                        index, bitmap, &oid, xor_bitmap, flags);
        }