Skip to content

Commit 7d6c447

Browse files
author
Junio C Hamano
committed
diff_flush(): leakfix.
We were leaking filepairs when output-format was set to NO_OUTPUT. Signed-off-by: Junio C Hamano <junkio@cox.net>
1 parent fa0cdab commit 7d6c447

File tree

1 file changed

+25
-19
lines changed

1 file changed

+25
-19
lines changed

diff.c

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1225,28 +1225,34 @@ void diff_flush(struct diff_options *options)
12251225

12261226
for (i = 0; i < q->nr; i++) {
12271227
struct diff_filepair *p = q->queue[i];
1228-
if ((diff_output_format == DIFF_FORMAT_NO_OUTPUT) ||
1229-
(p->status == DIFF_STATUS_UNKNOWN))
1230-
continue;
1231-
if (p->status == 0)
1232-
die("internal error in diff-resolve-rename-copy");
1233-
switch (diff_output_format) {
1234-
case DIFF_FORMAT_PATCH:
1235-
diff_flush_patch(p, options);
1236-
break;
1237-
case DIFF_FORMAT_RAW:
1238-
case DIFF_FORMAT_NAME_STATUS:
1239-
diff_flush_raw(p, line_termination,
1240-
inter_name_termination,
1241-
options);
1228+
1229+
switch (p->status) {
1230+
case DIFF_STATUS_UNKNOWN:
12421231
break;
1243-
case DIFF_FORMAT_NAME:
1244-
diff_flush_name(p,
1245-
inter_name_termination,
1246-
line_termination);
1232+
case 0:
1233+
die("internal error in diff-resolve-rename-copy");
12471234
break;
1235+
default:
1236+
switch (diff_output_format) {
1237+
case DIFF_FORMAT_PATCH:
1238+
diff_flush_patch(p, options);
1239+
break;
1240+
case DIFF_FORMAT_RAW:
1241+
case DIFF_FORMAT_NAME_STATUS:
1242+
diff_flush_raw(p, line_termination,
1243+
inter_name_termination,
1244+
options);
1245+
break;
1246+
case DIFF_FORMAT_NAME:
1247+
diff_flush_name(p,
1248+
inter_name_termination,
1249+
line_termination);
1250+
break;
1251+
case DIFF_FORMAT_NO_OUTPUT:
1252+
break;
1253+
}
12481254
}
1249-
diff_free_filepair(q->queue[i]);
1255+
diff_free_filepair(p);
12501256
}
12511257
free(q->queue);
12521258
q->queue = NULL;

0 commit comments

Comments
 (0)