patch: fix matching failure
Fix matching failure when plist is advanced while checking for buffered lines - the lines in the hunk that are about to be added should be skipped when checking for matching context. Also add a valid test case that fails with current busybox and is fixed by the change. Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
2eff59667d
commit
cb810c48c0
@ -290,6 +290,17 @@ static int apply_one_hunk(void)
|
|||||||
// out of buffer.
|
// out of buffer.
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
while (plist && *plist->data == "+-"[reverse]) {
|
||||||
|
if (!strcmp(check->data, plist->data+1) &&
|
||||||
|
!backwarn) {
|
||||||
|
backwarn = TT.linenum;
|
||||||
|
if (option_mask32 & FLAG_IGNORE) {
|
||||||
|
dummy_revert = 1;
|
||||||
|
reverse ^= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plist = plist->next;
|
||||||
|
}
|
||||||
if (!plist || strcmp(check->data, plist->data+1)) {
|
if (!plist || strcmp(check->data, plist->data+1)) {
|
||||||
// Match failed. Write out first line of buffered data and
|
// Match failed. Write out first line of buffered data and
|
||||||
// recheck remaining buffered data for a new match.
|
// recheck remaining buffered data for a new match.
|
||||||
|
@ -242,6 +242,51 @@ patch: can't open 'dir2///file': No such file or directory
|
|||||||
zxc
|
zxc
|
||||||
"
|
"
|
||||||
|
|
||||||
|
testing "patch internal buffering bug?" \
|
||||||
|
'patch -p1 2>&1; echo $?; cat input' \
|
||||||
|
"\
|
||||||
|
patching file input
|
||||||
|
0
|
||||||
|
foo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
|
||||||
|
bar
|
||||||
|
" \
|
||||||
|
"\
|
||||||
|
foo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bar
|
||||||
|
" \
|
||||||
|
"\
|
||||||
|
--- a/input.orig
|
||||||
|
+++ b/input
|
||||||
|
@@ -5,5 +5,8 @@ foo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
+1
|
||||||
|
+2
|
||||||
|
+3
|
||||||
|
|
||||||
|
bar
|
||||||
|
--
|
||||||
|
2.9.2
|
||||||
|
" \
|
||||||
|
|
||||||
rm input.orig 2>/dev/null
|
rm input.orig 2>/dev/null
|
||||||
|
|
||||||
exit $FAILCOUNT
|
exit $FAILCOUNT
|
||||||
|
Loading…
x
Reference in New Issue
Block a user