From: René Scharfe Date: Thu, 10 Aug 2017 09:42:21 +0000 (+0200) Subject: sha1_file: release delta_stack on error in unpack_entry() X-Git-Tag: v2.14.2~30^2 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/896dca3ab75de69e292d7863d704b3e7a8f1a59d?hp=--cc sha1_file: release delta_stack on error in unpack_entry() When unpack_entry() encounters a broken packed object, it returns early. It adjusts the reference count of the pack window, but leaks the buffer for a big delta stack in case the small automatic one was not enough. Jump to the cleanup code at end instead, which takes care of that. Signed-off-by: Rene Scharfe Signed-off-by: Junio C Hamano --- 896dca3ab75de69e292d7863d704b3e7a8f1a59d diff --git a/sha1_file.c b/sha1_file.c index d77b915db6..ba282c06bd 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -2462,8 +2462,8 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset, error("bad packed object CRC for %s", sha1_to_hex(sha1)); mark_bad_packed_object(p, sha1); - unuse_pack(&w_curs); - return NULL; + data = NULL; + goto out; } } @@ -2599,6 +2599,7 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset, *final_type = type; *final_size = size; +out: unuse_pack(&w_curs); if (delta_stack != small_delta_stack)