From: Johannes Sixt Date: Thu, 27 Apr 2017 17:24:20 GMT Subject: Re: [PATCH 22/26] add_reflog_for_walk: avoid memory leak Message-ID: <74da6153-2ce4-4224-d8d4-5be7481431ef@kdbg.org> In-Reply-To: Am 26.04.2017 um 22:21 schrieb Johannes Schindelin: > We free()d the `log` buffer when dwim_log() returned 1, but not when it > returned a larger value (which meant that it still allocated the buffer > but we simply ignored it). > > Identified by Coverity. > > Signed-off-by: Johannes Schindelin > --- > reflog-walk.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/reflog-walk.c b/reflog-walk.c > index 99679f58255..ec66f2b16e6 100644 > --- a/reflog-walk.c > +++ b/reflog-walk.c > @@ -183,7 +183,11 @@ int add_reflog_for_walk(struct reflog_walk_info *info, > if (!reflogs || reflogs->nr == 0) { > struct object_id oid; > char *b; > - if (dwim_log(branch, strlen(branch), oid.hash, &b) == 1) { > + int ret = dwim_log(branch, strlen(branch), > + oid.hash, &b); > + if (ret > 1) > + free(b); > + else if (ret == 1) { > if (reflogs) { > free(reflogs->ref); > free(reflogs); > Right after this hunk, there is another conditional that looks like it forgets to free reflogs. -- Hannes