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