Skip to content

Commit e36e28e

Browse files
committed
Merge branch 'rs/sha1-file-plug-fallback-base-leak' into maint
A leak in a codepath to read from a packed object in (rare) cases has been plugged. * rs/sha1-file-plug-fallback-base-leak: sha1_file: release fallback base's memory in unpack_entry()
2 parents d46d432 + 886ddf4 commit e36e28e

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

sha1_file.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2532,6 +2532,7 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset,
25322532
while (delta_stack_nr) {
25332533
void *delta_data;
25342534
void *base = data;
2535+
void *external_base = NULL;
25352536
unsigned long delta_size, base_size = size;
25362537
int i;
25372538

@@ -2558,6 +2559,7 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset,
25582559
p->pack_name);
25592560
mark_bad_packed_object(p, base_sha1);
25602561
base = read_object(base_sha1, &type, &base_size);
2562+
external_base = base;
25612563
}
25622564
}
25632565

@@ -2576,6 +2578,7 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset,
25762578
"at offset %"PRIuMAX" from %s",
25772579
(uintmax_t)curpos, p->pack_name);
25782580
data = NULL;
2581+
free(external_base);
25792582
continue;
25802583
}
25812584

@@ -2595,6 +2598,7 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset,
25952598
error("failed to apply delta");
25962599

25972600
free(delta_data);
2601+
free(external_base);
25982602
}
25992603

26002604
*final_type = type;

0 commit comments

Comments
 (0)