aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2009-10-25 18:35:59 -0700
committerJunio C Hamano <gitster@pobox.com>2009-10-25 18:35:59 -0700
commit47a876a088d2611d5295b0779bd9cf2465848ecd (patch)
tree9f9920c4e8bc4ebacaee42917d66f0e81e197899
parent071b489682f68c5e205ed3af2a7fe997f1d7c467 (diff)
parent39eea7bdd943a103deadfd4c4fd204bbbf111219 (diff)
downloadgit-47a876a088d2611d5295b0779bd9cf2465848ecd.tar.gz
git-47a876a088d2611d5295b0779bd9cf2465848ecd.tar.xz
Merge branch 'jc/maint-fix-unpack-zlib-check' into maint
* jc/maint-fix-unpack-zlib-check: Fix incorrect error check while reading deflated pack data
-rw-r--r--sha1_file.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/sha1_file.c b/sha1_file.c
index 4cc8939e4..63981fb3f 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -1357,8 +1357,6 @@ unsigned long get_size_from_delta(struct packed_git *p,
in = use_pack(p, w_curs, curpos, &stream.avail_in);
stream.next_in = in;
st = git_inflate(&stream, Z_FINISH);
- if (st == Z_BUF_ERROR && (stream.avail_in || !stream.avail_out))
- break;
curpos += stream.next_in - in;
} while ((st == Z_OK || st == Z_BUF_ERROR) &&
stream.total_out < sizeof(delta_head));
@@ -1589,15 +1587,15 @@ static void *unpack_compressed_entry(struct packed_git *p,
buffer[size] = 0;
memset(&stream, 0, sizeof(stream));
stream.next_out = buffer;
- stream.avail_out = size;
+ stream.avail_out = size + 1;
git_inflate_init(&stream);
do {
in = use_pack(p, w_curs, curpos, &stream.avail_in);
stream.next_in = in;
st = git_inflate(&stream, Z_FINISH);
- if (st == Z_BUF_ERROR && (stream.avail_in || !stream.avail_out))
- break;
+ if (!stream.avail_out)
+ break; /* the payload is larger than it should be */
curpos += stream.next_in - in;
} while (st == Z_OK || st == Z_BUF_ERROR);
git_inflate_end(&stream);