Re: [PATCH 22/26] add_reflog_for_walk: avoid memory leak
- From
Johannes Sixt <j6t@kdbg.org>
- Date
- Apr 27, 2017, 17:24 UTC
- Message-ID
- <74da6153-2ce4-4224-d8d4-5be7481431ef@kdbg.org>
- In-Reply-To
- <aeb46b9436b1f5f54322cb818519db97801b9d7a.1493237937.git.johannes.schindelin@gmx.de>
Am 26.04.2017 um 22:21 schrieb Johannes Schindelin:
Show 29 quoted lines
> 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 <johannes.schindelin@gmx.de>
> ---
> 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