1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-10 01:26:31 +02:00

Merge branch 'jk/apply-binary-hunk-parsing-fix' into maint

"git apply" miscounted the bytes and failed to read to the end of
binary hunks.

* jk/apply-binary-hunk-parsing-fix:
  apply: keep buffer/size pair in sync when parsing binary hunks
This commit is contained in:
Junio C Hamano 2021-10-12 13:51:37 -07:00
commit 1725c4c64b
2 changed files with 24 additions and 0 deletions

View File

@ -1917,6 +1917,7 @@ static struct fragment *parse_binary_hunk(struct apply_state *state,
state->linenr++;
buffer += llen;
size -= llen;
while (1) {
int byte_length, max_byte_length, newsize;
llen = linelen(buffer, size);

View File

@ -158,4 +158,27 @@ test_expect_success 'apply binary -p0 diff' '
test -z "$(git diff --name-status binary -- file3)"
'
test_expect_success 'reject truncated binary diff' '
do_reset &&
# this length is calculated to get us very close to
# the 8192-byte strbuf we will use to read in the patch.
test-tool genrandom foo 6205 >file1 &&
git diff --binary >patch &&
# truncate the patch at the second "literal" line,
# but exclude the trailing newline. We must use perl
# for this, since tools like "sed" cannot reliably
# produce output without the trailing newline.
perl -pe "
if (/^literal/ && \$count++ >= 1) {
chomp;
print;
exit 0;
}
" <patch >patch.trunc &&
do_reset &&
test_must_fail git apply patch.trunc
'
test_done