X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=diffcore-rename.c;h=ffd126af0d2cd3539e0f186e83c7671132758e6b;hb=525c0d713c101cf795980aec3baa08f49ec7147f;hp=6a9d95d0593f26c5e698c5e593a9efc287c8e399;hpb=3299c6f6a8a384453d025ffa117c5d8b35ba1972;p=git.git diff --git a/diffcore-rename.c b/diffcore-rename.c index 6a9d95d0..ffd126af 100644 --- a/diffcore-rename.c +++ b/diffcore-rename.c @@ -176,8 +176,10 @@ static int estimate_similarity(struct diff_filespec *src, /* A delta that has a lot of literal additions would have * big delta_size no matter what else it does. */ - if (base_size * (MAX_SCORE-minimum_score) < delta_size * MAX_SCORE) + if (base_size * (MAX_SCORE-minimum_score) < delta_size * MAX_SCORE) { + free(delta); return 0; + } /* Estimate the edit size by interpreting delta. */ if (count_delta(delta, delta_size, &src_copied, &literal_added)) { @@ -282,7 +284,7 @@ void diffcore_rename(struct diff_options *options) else if (detect_rename == DIFF_DETECT_COPY) register_rename_src(p->one, 1); } - if (rename_dst_nr == 0 || + if (rename_dst_nr == 0 || rename_src_nr == 0 || (0 < rename_limit && rename_limit < rename_dst_nr)) goto cleanup; /* nothing to do */ @@ -307,6 +309,9 @@ void diffcore_rename(struct diff_options *options) if (rename_count == rename_dst_nr) goto cleanup; + if (minimum_score == MAX_SCORE) + goto cleanup; + num_create = (rename_dst_nr - rename_count); num_src = rename_src_nr; mx = xmalloc(sizeof(*mx) * num_create * num_src);