Merge branch 'ar/win'
[gitweb.git] / diffcore-rename.c
index 6a9d95d0593f26c5e698c5e593a9efc287c8e399..ffd126af0d2cd3539e0f186e83c7671132758e6b 100644 (file)
@@ -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);