Skip to content

Commit 599dc76

Browse files
rscharfegitster
authored andcommitted
pack-bitmaps: plug memory leak, fix allocation size for recent_bitmaps
Use an automatic variable for recent_bitmaps, an array of pointers. This way we don't allocate too much and don't have to free the memory at the end. The old code over-allocated because it reserved enough memory to store all of the structs it is only pointing to and never freed it. 160 64-bit pointers take up 1280 bytes, which is not too much to be placed on the stack. MAX_XOR_OFFSET is turned into a preprocessor constant to make it constant enough for use in an non-variable array declaration. Noticed-by: Stefan Beller <[email protected]> Suggested-by: Jeff King <[email protected]> Signed-off-by: Rene Scharfe <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 52735a6 commit 599dc76

File tree

1 file changed

+3
-5
lines changed

1 file changed

+3
-5
lines changed

pack-bitmap.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -209,14 +209,12 @@ static inline uint8_t read_u8(const unsigned char *buffer, size_t *pos)
209209
return buffer[(*pos)++];
210210
}
211211

212+
#define MAX_XOR_OFFSET 160
213+
212214
static int load_bitmap_entries_v1(struct bitmap_index *index)
213215
{
214-
static const size_t MAX_XOR_OFFSET = 160;
215-
216216
uint32_t i;
217-
struct stored_bitmap **recent_bitmaps;
218-
219-
recent_bitmaps = xcalloc(MAX_XOR_OFFSET, sizeof(struct stored_bitmap));
217+
struct stored_bitmap *recent_bitmaps[MAX_XOR_OFFSET] = { NULL };
220218

221219
for (i = 0; i < index->entry_count; ++i) {
222220
int xor_offset, flags;

0 commit comments

Comments
 (0)