{"thread":{"id":"3800","subject":"[PATCH] diff_flush(): leakfix.","startedAt":"2006-04-05T09:45:40Z","lastAt":"2006-04-05T09:45:40Z","messageCount":1,"participants":["Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"18376","messageId":"7vu0982w57.fsf@assigned-by-dhcp.cox.net","threadId":"3800","inReplyTo":null,"subject":"[PATCH] diff_flush(): leakfix.","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2006-04-05T09:45:40Z","receivedAt":"2006-04-05T09:45:40Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"We were leaking filepairs when output-format was set to\nNO_OUTPUT.\n\nSigned-off-by: Junio C Hamano <junkio@cox.net>\n\n---\n\n * This is somewhat embarrassing that the original breakage was\n   in a commit on Aug 21, 2005 and the bug stayed there forever\n   in git timescale.\n\n diff.c |   44 +++++++++++++++++++++++++-------------------\n 1 files changed, 25 insertions(+), 19 deletions(-)\n\na12d2890e4d1ada6f9302dea10d151b819e0c0d0\ndiff --git a/diff.c b/diff.c\nindex e496905..fe4664c 100644\n--- a/diff.c\n+++ b/diff.c\n@@ -1280,28 +1280,34 @@ void diff_flush(struct diff_options *opt\n \n \tfor (i = 0; i < q->nr; i++) {\n \t\tstruct diff_filepair *p = q->queue[i];\n-\t\tif ((diff_output_format == DIFF_FORMAT_NO_OUTPUT) ||\n-\t\t    (p->status == DIFF_STATUS_UNKNOWN))\n-\t\t\tcontinue;\n-\t\tif (p->status == 0)\n-\t\t\tdie(\"internal error in diff-resolve-rename-copy\");\n-\t\tswitch (diff_output_format) {\n-\t\tcase DIFF_FORMAT_PATCH:\n-\t\t\tdiff_flush_patch(p, options);\n-\t\t\tbreak;\n-\t\tcase DIFF_FORMAT_RAW:\n-\t\tcase DIFF_FORMAT_NAME_STATUS:\n-\t\t\tdiff_flush_raw(p, line_termination,\n-\t\t\t\t       inter_name_termination,\n-\t\t\t\t       options);\n+\n+\t\tswitch (p->status) {\n+\t\tcase DIFF_STATUS_UNKNOWN:\n \t\t\tbreak;\n-\t\tcase DIFF_FORMAT_NAME:\n-\t\t\tdiff_flush_name(p,\n-\t\t\t\t\tinter_name_termination,\n-\t\t\t\t\tline_termination);\n+\t\tcase 0:\n+\t\t\tdie(\"internal error in diff-resolve-rename-copy\");\n \t\t\tbreak;\n+\t\tdefault:\n+\t\t\tswitch (diff_output_format) {\n+\t\t\tcase DIFF_FORMAT_PATCH:\n+\t\t\t\tdiff_flush_patch(p, options);\n+\t\t\t\tbreak;\n+\t\t\tcase DIFF_FORMAT_RAW:\n+\t\t\tcase DIFF_FORMAT_NAME_STATUS:\n+\t\t\t\tdiff_flush_raw(p, line_termination,\n+\t\t\t\t\t       inter_name_termination,\n+\t\t\t\t\t       options);\n+\t\t\t\tbreak;\n+\t\t\tcase DIFF_FORMAT_NAME:\n+\t\t\t\tdiff_flush_name(p,\n+\t\t\t\t\t\tinter_name_termination,\n+\t\t\t\t\t\tline_termination);\n+\t\t\t\tbreak;\n+\t\t\tcase DIFF_FORMAT_NO_OUTPUT:\n+\t\t\t\tbreak;\n+\t\t\t}\n \t\t}\n-\t\tdiff_free_filepair(q->queue[i]);\n+\t\tdiff_free_filepair(p);\n \t}\n \tfree(q->queue);\n \tq->queue = NULL;\n-- \n1.3.0.rc2.g110c\n"}]}