From ff5eea06a98182697f16d1335ee331cd8cd1b90c Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Mon, 12 Dec 2016 09:36:15 +0100 Subject: [PATCH] pack: dereference cached pack entry on error When trying to uncompress deltas in a packfile's delta chain, we try to add object bases to the packfile cache, subsequently decrementing its reference count if it has been added successfully. This may lead to a mismatched reference count in the case where we exit the loop early due to an encountered error. Fix the issue by decrementing the reference count in error cleanup. --- src/pack.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pack.c b/src/pack.c index 2ee0c60e4..16e82a92b 100644 --- a/src/pack.c +++ b/src/pack.c @@ -757,8 +757,11 @@ int git_packfile_unpack( } cleanup: - if (error < 0) + if (error < 0) { git__free(obj->data); + if (cached) + git_atomic_dec(&cached->refcount); + } if (elem) *obj_offset = curpos;