diff options
author | Patrick Steinhardt <ps@pks.im> | 2016-12-12 09:36:15 +0100 |
---|---|---|
committer | Patrick Steinhardt <ps@pks.im> | 2016-12-12 09:45:07 +0100 |
commit | ff5eea06a98182697f16d1335ee331cd8cd1b90c (patch) | |
tree | 7df75d7c133b45fa391948a2af38c89be37805b1 | |
parent | 8339c66068c8e964f8bf1eca10745db730bf62fa (diff) | |
download | libgit2-ff5eea06a98182697f16d1335ee331cd8cd1b90c.tar.gz |
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.
-rw-r--r-- | src/pack.c | 5 |
1 files changed, 4 insertions, 1 deletions
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; |