diff options
author | Pedro F. Giffuni <pfg@FreeBSD.org> | 2023-12-03 17:33:03 +0000 |
---|---|---|
committer | Pedro F. Giffuni <pfg@FreeBSD.org> | 2023-12-03 17:33:03 +0000 |
commit | 7e8afbb6d605006d7cb867362b225d21c4f5ae57 (patch) | |
tree | a31023049e16e4cfff11526487d64e8307880c2e /usr.bin | |
parent | 970d73856b626a68597de19d37b68c376e2c0491 (diff) | |
download | src-7e8afbb6d605006d7cb867362b225d21c4f5ae57.tar.gz src-7e8afbb6d605006d7cb867362b225d21c4f5ae57.zip |
patch: fix locate_hunk in empty files
if `first_guess' is zero then main() assumes that locate_hunk has failed
and aborts the patch operation. Instead, make sure to return 1 (the
line number) so that the patch operation can continue.
Issue originally found by Neels Hofmeyr in the regress suite of the diff
implementation for got, where the tests assume that applying a diff with
`patch' and then again with `patch -R' yields back the original file.
Obtained from: OpenBSD (CVS patch.c,v 1.71)
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/patch/patch.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/usr.bin/patch/patch.c b/usr.bin/patch/patch.c index ecaf799fe9b6..403189bc92b1 100644 --- a/usr.bin/patch/patch.c +++ b/usr.bin/patch/patch.c @@ -717,6 +717,8 @@ locate_hunk(LINENUM fuzz) || diff_type == UNI_DIFF)) { say("Empty context always matches.\n"); } + if (first_guess == 0) /* empty file */ + return 1; return (first_guess); } if (max_neg_offset >= first_guess) /* do not try lines < 0 */ |