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.
This commit is contained in:
Patrick Steinhardt 2016-12-12 09:36:15 +01:00
parent 8339c66068
commit ff5eea06a9

View File

@ -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;