diff options
author | Jeff King <peff@peff.net> | 2012-07-04 03:12:14 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-07-10 16:45:00 -0700 |
commit | f8b090386bb5af172ea95f16ad6274e02222d2c1 (patch) | |
tree | e66dd9f175be2167dbb06733f7f67c3a563a2b6f /read-cache.c | |
parent | index-pack: use streaming interface for collision test on large blobs (diff) | |
download | tgif-f8b090386bb5af172ea95f16ad6274e02222d2c1.tar.xz |
index-pack: loop while inflating objects in unpack_data
When the unpack_data function is given a consume() callback,
it unpacks only 64K of the input at a time, feeding it to
git_inflate along with a 64K output buffer. However,
because we are inflating, there is a good chance that the
output buffer will fill before consuming all of the input.
In this case, we need to loop on git_inflate until we have
fed the whole input buffer, feeding each chunk of output to
the consume buffer.
The current code does not do this, and as a result, will
fail the loop condition and trigger a fatal "serious inflate
inconsistency" error in this case.
While we're rearranging the loop, let's get rid of the
extra last_out pointer. It is meant to point to the
beginning of the buffer that we feed to git_inflate, but in
practice this is always the beginning of our same 64K
buffer, because:
1. At the beginning of the loop, we are feeding the
buffer.
2. At the end of the loop, if we are using a consume()
function, we reset git_inflate's pointer to the
beginning of the buffer. If we are not using a
consume() function, then we do not care about the value
of last_out at all.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'read-cache.c')
0 files changed, 0 insertions, 0 deletions