From 896dca3ab75de69e292d7863d704b3e7a8f1a59d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Scharfe?= Date: Thu, 10 Aug 2017 11:42:21 +0200 Subject: 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 --- sha1_file.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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) -- cgit v1.2.1