diff options
author | Junio C Hamano <gitster@pobox.com> | 2021-10-12 13:51:37 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-10-12 13:51:37 -0700 |
commit | 1725c4c64b462af36a9b7e83869af2806ea9d258 (patch) | |
tree | ddbbaf8ff66ed610fcc9b6a6068569e2031d34fd | |
parent | Merge branch 'en/pull-conflicting-options' into maint (diff) | |
parent | apply: keep buffer/size pair in sync when parsing binary hunks (diff) | |
download | tgif-1725c4c64b462af36a9b7e83869af2806ea9d258.tar.xz |
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
-rw-r--r-- | apply.c | 1 | ||||
-rwxr-xr-x | t/t4103-apply-binary.sh | 23 |
2 files changed, 24 insertions, 0 deletions
@@ -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); diff --git a/t/t4103-apply-binary.sh b/t/t4103-apply-binary.sh index fad6d3f542..d370ecfe0d 100755 --- a/t/t4103-apply-binary.sh +++ b/t/t4103-apply-binary.sh @@ -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 |