Kevin Willford <kewillf@xxxxxxxxxxxxx> writes: > 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 <kewillf@xxxxxxxxxxxxx> > --- Thanks for spotting an old error that dates back to at least 2013 this month. The patch looks sensible. > read-cache.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > 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;