write_entry: fix leak when retrying delayed filter
authorJeff King <peff@peff.net>
Mon, 9 Oct 2017 17:48:24 +0000 (13:48 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 9 Oct 2017 23:59:02 +0000 (08:59 +0900)
When write_entry() retries a delayed filter request, we
don't need to send the blob content to the filter again, and
set the pointer to NULL. But doing so means we leak the
contents we read earlier from read_blob_entry(). Let's make
sure to free it before dropping the pointer.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
entry.c
diff --git a/entry.c b/entry.c
index ab79f1f69c892a47a9494f9ebf4f96a7084f6cea..637c5958b0a90554378a461d69df18c1ceab4ff6 100644 (file)
--- a/entry.c
+++ b/entry.c
@@ -283,6 +283,7 @@ static int write_entry(struct cache_entry *ce,
                        if (dco && dco->state != CE_NO_DELAY) {
                                /* Do not send the blob in case of a retry. */
                                if (dco->state == CE_RETRY) {
+                                       free(new);
                                        new = NULL;
                                        size = 0;
                                }