diff -r aff5996f3043 -r f33a87cf60cc mercurial/thirdparty/xdiff/xdiffi.c --- a/mercurial/thirdparty/xdiff/xdiffi.c Fri Mar 09 14:30:15 2018 -0800 +++ b/mercurial/thirdparty/xdiff/xdiffi.c Wed Mar 07 14:45:31 2018 -0800 @@ -1062,6 +1062,7 @@ static int xdl_call_hunk_func(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb, xdemitconf_t const *xecfg) { + long p = xe->nprefix, s = xe->nsuffix; xdchange_t *xch, *xche; if (!xecfg->hunk_func) @@ -1073,6 +1074,10 @@ xche = xdl_get_hunk(&xch, xecfg); if (!xch) break; + if (xch != xche) + xdl_bug("xch != xche"); + xch->i1 += p; + xch->i2 += p; if (xch->i1 > i1 || xch->i2 > i2) { if (xecfg->hunk_func(i1, xch->i1, i2, xch->i2, ecb->priv) < 0) return -1; @@ -1080,16 +1085,18 @@ i1 = xche->i1 + xche->chg1; i2 = xche->i2 + xche->chg2; } - if (xecfg->hunk_func(i1, n1, i2, n2, ecb->priv) < 0) + if (xecfg->hunk_func(i1, n1 + p + s, i2, n2 + p + s, + ecb->priv) < 0) return -1; } else { for (xch = xscr; xch; xch = xche->next) { xche = xdl_get_hunk(&xch, xecfg); if (!xch) break; - if (xecfg->hunk_func( - xch->i1, xche->i1 + xche->chg1 - xch->i1, - xch->i2, xche->i2 + xche->chg2 - xch->i2, + if (xecfg->hunk_func(xch->i1 + p, + xche->i1 + xche->chg1 - xch->i1, + xch->i2 + p, + xche->i2 + xche->chg2 - xch->i2, ecb->priv) < 0) return -1; }