diff --git a/mercurial/thirdparty/xdiff/xprepare.c b/mercurial/thirdparty/xdiff/xprepare.c --- a/mercurial/thirdparty/xdiff/xprepare.c +++ b/mercurial/thirdparty/xdiff/xprepare.c @@ -441,17 +441,27 @@ recs1 = xdf1->recs; recs2 = xdf2->recs; for (i = 0, lim = XDL_MIN(xdf1->nrec, xdf2->nrec); i < lim; - i++, recs1++, recs2++) - if ((*recs1)->ha != (*recs2)->ha) + i++, recs1++, recs2++) { + /* rec->ha is not processed by xdl_prepare_hashtable, so + * they are not unique - do a content match here */ + if ((*recs1)->size != (*recs2)->size) break; + if (memcmp((*recs1)->ptr, (*recs2)->ptr, (*recs1)->size) != 0) + break; + } xdf1->dstart = xdf2->dstart = i; recs1 = xdf1->recs + xdf1->nrec - 1; recs2 = xdf2->recs + xdf2->nrec - 1; - for (lim -= i, i = 0; i < lim; i++, recs1--, recs2--) - if ((*recs1)->ha != (*recs2)->ha) + for (lim -= i, i = 0; i < lim; i++, recs1--, recs2--) { + /* rec->ha is not processed by xdl_prepare_hashtable, so + * they are not unique - do a content match here */ + if ((*recs1)->size != (*recs2)->size) break; + if (memcmp((*recs1)->ptr, (*recs2)->ptr, (*recs1)->size) != 0) + break; + } xdf1->dend = xdf1->nrec - i - 1; xdf2->dend = xdf2->nrec - i - 1;