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
maint
Junio C Hamano 2009-10-25 18:35:59 -07:00
commit 47a876a088
1 changed files with 3 additions and 5 deletions

View File

@ -1357,8 +1357,6 @@ unsigned long get_size_from_delta(struct packed_git *p,
in = use_pack(p, w_curs, curpos, &stream.avail_in); in = use_pack(p, w_curs, curpos, &stream.avail_in);
stream.next_in = in; stream.next_in = in;
st = git_inflate(&stream, Z_FINISH); st = git_inflate(&stream, Z_FINISH);
if (st == Z_BUF_ERROR && (stream.avail_in || !stream.avail_out))
break;
curpos += stream.next_in - in; curpos += stream.next_in - in;
} while ((st == Z_OK || st == Z_BUF_ERROR) && } while ((st == Z_OK || st == Z_BUF_ERROR) &&
stream.total_out < sizeof(delta_head)); stream.total_out < sizeof(delta_head));
@ -1589,15 +1587,15 @@ static void *unpack_compressed_entry(struct packed_git *p,
buffer[size] = 0; buffer[size] = 0;
memset(&stream, 0, sizeof(stream)); memset(&stream, 0, sizeof(stream));
stream.next_out = buffer; stream.next_out = buffer;
stream.avail_out = size; stream.avail_out = size + 1;


git_inflate_init(&stream); git_inflate_init(&stream);
do { do {
in = use_pack(p, w_curs, curpos, &stream.avail_in); in = use_pack(p, w_curs, curpos, &stream.avail_in);
stream.next_in = in; stream.next_in = in;
st = git_inflate(&stream, Z_FINISH); st = git_inflate(&stream, Z_FINISH);
if (st == Z_BUF_ERROR && (stream.avail_in || !stream.avail_out)) if (!stream.avail_out)
break; break; /* the payload is larger than it should be */
curpos += stream.next_in - in; curpos += stream.next_in - in;
} while (st == Z_OK || st == Z_BUF_ERROR); } while (st == Z_OK || st == Z_BUF_ERROR);
git_inflate_end(&stream); git_inflate_end(&stream);