X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=diffcore-break.c;h=c57513a4fa83c58c5040ead38c52765051cd13f5;hb=abb7c7b31c0896bd838bbb6437b310db5a42227a;hp=b0c8461e1243328795258f0fd7d12f509403403c;hpb=b30245c8e92ecaf8fb877189d7620a5a9a205120;p=git.git diff --git a/diffcore-break.c b/diffcore-break.c index b0c8461e..c57513a4 100644 --- a/diffcore-break.c +++ b/diffcore-break.c @@ -62,10 +62,14 @@ static int should_break(struct diff_filespec *src, return 0; /* error but caught downstream */ base_size = ((src->size < dst->size) ? src->size : dst->size); + if (base_size < MINIMUM_BREAK_SIZE) + return 0; /* we do not break too small filepair */ delta = diff_delta(src->data, src->size, dst->data, dst->size, &delta_size, 0); + if (!delta) + return 0; /* error but caught downstream */ /* Estimate the edit size by interpreting delta. */ if (count_delta(delta, delta_size, @@ -168,8 +172,7 @@ void diffcore_break(int break_score) !S_ISDIR(p->one->mode) && !S_ISDIR(p->two->mode) && !strcmp(p->one->path, p->two->path)) { if (should_break(p->one, p->two, - break_score, &score) && - MINIMUM_BREAK_SIZE <= p->one->size) { + break_score, &score)) { /* Split this into delete and create */ struct diff_filespec *null_one, *null_two; struct diff_filepair *dp; @@ -231,8 +234,8 @@ static void merge_broken(struct diff_filepair *p, dp = diff_queue(outq, d->one, c->two); dp->score = p->score; - diff_free_filespec(d->two); - diff_free_filespec(c->one); + diff_free_filespec_data(d->two); + diff_free_filespec_data(c->one); free(d); free(c); }