patch-id: fix scan_hunk_header on diffs with 1 line of before/after
commit757e75c81e4332e363b90a0534a657b1bb6546fa
authorJerry Zhang <jerry@skydio.com>
Wed, 2 Feb 2022 04:19:45 +0000 (1 20:19 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 2 Feb 2022 19:24:23 +0000 (2 11:24 -0800)
tree56335565b56b3ecd5c8b688d61765de86f61894c
parent56fa5ac39a8601d965127abebbc533f29eaef751
patch-id: fix scan_hunk_header on diffs with 1 line of before/after

Normally diffs will contain a hunk header of the format
"@@ -2,2 +2,15 @@ code". However when there is only 1 line of
change, the unified diff format allows for the second comma
separated value to be omitted in either before or after
line counts.

This can produce hunk headers that look like
"@@ -2 +2,18 @@ code" or "@@ -2,2 +2 @@ code".
As a result, scan_hunk_header mistakenly returns the line
number as line count, which then results in unpredictable
parsing errors with the rest of the patch, including giving
multiple lines of output for a single commit.

Fix by explicitly setting line count to 1 when there is
no comma, and add a test.

apply.c contains this same logic except it is correct. A
worthwhile future project might be to unify these two diff
parsers so they both benefit from fixes.

Signed-off-by: Jerry Zhang <jerry@skydio.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/patch-id.c
t/t4204-patch-id.sh