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: http://git.ipfire.org/?a=commitdiff_plain;h=896dca3ab75de69e292d7863d704b3e7a8f1a59d;p=thirdparty%2Fgit.git 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 --- 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)