--- a/mercurial/bdiff.c Tue Nov 08 18:37:33 2016 +0100
+++ b/mercurial/bdiff.c Tue Nov 08 18:37:33 2016 +0100
@@ -143,7 +143,7 @@
struct pos *pos,
int a1, int a2, int b1, int b2, int *omi, int *omj)
{
- int mi = a1, mj = b1, mk = 0, i, j, k, half;
+ int mi = a1, mj = b1, mk = 0, i, j, k, half, bhalf;
/* window our search on large regions to better bound
worst-case performance. by choosing a window at the end, we
@@ -152,6 +152,7 @@
a1 = a2 - 30000;
half = (a1 + a2 - 1) / 2;
+ bhalf = (b1 + b2 - 1) / 2;
for (i = a1; i < a2; i++) {
/* skip all lines in b after the current block */
@@ -187,8 +188,8 @@
/* same match but closer to half */
mi = i;
mj = j;
- } else if (i == mi) {
- /* same i but earlier j */
+ } else if (i == mi && mj > bhalf) {
+ /* same i but best earlier j */
mj = j;
}
}