diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2020-12-16 00:16:10 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-16 00:16:10 +0000 |
commit | 1865806e466d0b18d399ba877b940ab331d365b3 (patch) | |
tree | d95846422c92efb8fc1f4afd023ab23997bae7fa | |
parent | 4ab9567f6968f3cdd58ad260ba7782b6e46ca02e (diff) | |
parent | 93f61c5a9f638e76189cef2dbde7839a9af5ff54 (diff) | |
download | libgit2-1865806e466d0b18d399ba877b940ab331d365b3.tar.gz |
Merge pull request #5740 from libgit2/ethomson/zlib
pack: continue zlib while we can make progress
-rw-r--r-- | src/pack.c | 13 |
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)); |