summaryrefslogtreecommitdiff
path: root/convert.h
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2012-07-04 07:12:14 (GMT)
committerJunio C Hamano <gitster@pobox.com>2012-07-10 23:45:00 (GMT)
commitf8b090386bb5af172ea95f16ad6274e02222d2c1 (patch)
treee66dd9f175be2167dbb06733f7f67c3a563a2b6f /convert.h
parent4614043c8fd8972bcde4fbfce7a8d25dd6d206fd (diff)
downloadgit-f8b090386bb5af172ea95f16ad6274e02222d2c1.zip
git-f8b090386bb5af172ea95f16ad6274e02222d2c1.tar.gz
git-f8b090386bb5af172ea95f16ad6274e02222d2c1.tar.bz2
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 'convert.h')
0 files changed, 0 insertions, 0 deletions