X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=apply.c;h=fab44322c5f27952842b6bcfe48bd5e5f8a3c739;hb=f696a2b1c850c81130740945835beec72727debf;hp=d57ac0d052b71a442575ae821d3beb3d64af6036;hpb=88cf80949e0a4c3cacd4be80358e5fe62acbf0ae;p=thirdparty%2Fgit.git diff --git a/apply.c b/apply.c index d57ac0d052..fab44322c5 100644 --- a/apply.c +++ b/apply.c @@ -450,7 +450,7 @@ static char *find_name_gnu(struct strbuf *root, /* * Proposed "new-style" GNU patch/diff format; see - * https://public-inbox.org/git/7vll0wvb2a.fsf@assigned-by-dhcp.cox.net/ + * https://lore.kernel.org/git/7vll0wvb2a.fsf@assigned-by-dhcp.cox.net/ */ if (unquote_c_style(&name, line, NULL)) { strbuf_release(&name); @@ -2661,6 +2661,16 @@ static int find_pos(struct apply_state *state, unsigned long backwards, forwards, current; int backwards_lno, forwards_lno, current_lno; + /* + * When running with --allow-overlap, it is possible that a hunk is + * seen that pretends to start at the beginning (but no longer does), + * and that *still* needs to match the end. So trust `match_end` more + * than `match_beginning`. + */ + if (state->allow_overlap && match_beginning && match_end && + img->nr - preimage->nr != 0) + match_beginning = 0; + /* * If match_beginning or match_end is specified, there is no * point starting from a wrong line that will never match and