summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2020-12-16 00:16:10 +0000
committerGitHub <noreply@github.com>2020-12-16 00:16:10 +0000
commit1865806e466d0b18d399ba877b940ab331d365b3 (patch)
treed95846422c92efb8fc1f4afd023ab23997bae7fa
parent4ab9567f6968f3cdd58ad260ba7782b6e46ca02e (diff)
parent93f61c5a9f638e76189cef2dbde7839a9af5ff54 (diff)
downloadlibgit2-1865806e466d0b18d399ba877b940ab331d365b3.tar.gz
Merge pull request #5740 from libgit2/ethomson/zlib
pack: continue zlib while we can make progress
-rw-r--r--src/pack.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/pack.c b/src/pack.c
index a9140c63d..30b1464b6 100644
--- a/src/pack.c
+++ b/src/pack.c
@@ -908,7 +908,7 @@ static int packfile_unpack_compressed(
do {
size_t bytes = buffer_len - total;
- unsigned int window_len;
+ unsigned int window_len, consumed;
unsigned char *in;
if ((in = pack_window_open(p, mwindow, *position, &window_len)) == NULL) {
@@ -924,10 +924,15 @@ static int packfile_unpack_compressed(
git_mwindow_close(mwindow);
- if (!bytes)
- break;
+ consumed = window_len - (unsigned int)zstream.in_len;
+
+ if (!bytes && !consumed) {
+ git_error_set(GIT_ERROR_ZLIB, "error inflating zlib stream");
+ error = -1;
+ goto out;
+ }
- *position += window_len - zstream.in_len;
+ *position += consumed;
total += bytes;
} while (!git_zstream_eos(&zstream));