diff options
author | Junio C Hamano <gitster@pobox.com> | 2009-10-14 16:10:37 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-10-14 16:10:37 -0700 |
commit | 695f9523ddfa0a2b8325507b4f077b073d8f438f (patch) | |
tree | 007e445a49deb60ab1fbdb886a202590cd1837a1 /sha1_file.c | |
parent | Merge branch 'maint' (diff) | |
parent | sha1_file: Fix infinite loop when pack is corrupted (diff) | |
download | tgif-695f9523ddfa0a2b8325507b4f077b073d8f438f.tar.xz |
Merge branch 'maint'
* maint:
sha1_file: Fix infinite loop when pack is corrupted
Diffstat (limited to 'sha1_file.c')
-rw-r--r-- | sha1_file.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sha1_file.c b/sha1_file.c index 4ea0b18d0a..4cc8939e4b 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -1357,6 +1357,8 @@ 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)); @@ -1594,6 +1596,8 @@ static void *unpack_compressed_entry(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); git_inflate_end(&stream); |