diff options
author | Edward Thomson <ethomson@microsoft.com> | 2015-02-13 09:35:20 -0500 |
---|---|---|
committer | Edward Thomson <ethomson@microsoft.com> | 2015-02-13 09:35:20 -0500 |
commit | 0f07d54b44825399e5d13499328135771c8d0b43 (patch) | |
tree | 7e0a99a24bc86db609dbb74fbb222b6aabb56240 | |
parent | d97d9559e321ac2ef2ae81a6cfd308a841ef7581 (diff) | |
download | libgit2-0f07d54b44825399e5d13499328135771c8d0b43.tar.gz |
pack-objects: unlock the cache on integer overflow
-rw-r--r-- | src/pack-objects.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/pack-objects.c b/src/pack-objects.c index 67d6125ff..f644520ac 100644 --- a/src/pack-objects.c +++ b/src/pack-objects.c @@ -832,13 +832,14 @@ static int try_delta(git_packbuilder *pb, struct unpacked *trg, trg_object->delta_data = NULL; } if (delta_cacheable(pb, src_size, trg_size, delta_size)) { - if (git__add_uint64_overflow(&pb->delta_cache_size, pb->delta_cache_size, delta_size)) - return -1; + bool overflow = git__add_uint64_overflow( + &pb->delta_cache_size, pb->delta_cache_size, delta_size); git_packbuilder__cache_unlock(pb); - trg_object->delta_data = git__realloc(delta_buf, delta_size); - GITERR_CHECK_ALLOC(trg_object->delta_data); + if (overflow || + !(trg_object->delta_data = git__realloc(delta_buf, delta_size))) + return -1; } else { /* create delta when writing the pack */ git_packbuilder__cache_unlock(pb); |