From: Kevin Willford Date: Mon, 21 Aug 2017 21:24:31 +0000 (-0600) Subject: read-cache: fix memory leak in do_write_index X-Git-Tag: v2.15.0-rc0~119^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b50386c7c038ccea8f70d2a66ac78f189240ef05;p=thirdparty%2Fgit.git read-cache: fix memory leak in do_write_index The previous_name_buf was never getting released when there was an error in ce_write_entry or allow was false and execution was returned to the caller. Signed-off-by: Kevin Willford Signed-off-by: Junio C Hamano --- diff --git a/read-cache.c b/read-cache.c index acfb028f48..47220cc30d 100644 --- a/read-cache.c +++ b/read-cache.c @@ -2192,7 +2192,7 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile, int newfd = tempfile->fd; git_SHA_CTX c; struct cache_header hdr; - int i, err, removed, extended, hdr_version; + int i, err = 0, removed, extended, hdr_version; struct cache_entry **cache = istate->cache; int entries = istate->cache_nr; struct stat st; @@ -2247,15 +2247,21 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile, if (allow) warning(msg, ce->name); else - return error(msg, ce->name); + err = error(msg, ce->name); drop_cache_tree = 1; } if (ce_write_entry(&c, newfd, ce, previous_name) < 0) - return -1; + err = -1; + + if (err) + break; } strbuf_release(&previous_name_buf); + if (err) + return err; + /* Write extension data here */ if (!strip_extensions && istate->split_index) { struct strbuf sb = STRBUF_INIT;