Skip to content

Commit

Permalink
transport: fix leaks in refs_from_alternate_cb
Browse files Browse the repository at this point in the history
The function starts by creating a copy of the static buffer
returned by real_path, but forgets to free it in the error
code paths. We can solve this by jumping to the cleanup code
that is already there.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Jul 24, 2014
1 parent 28b3563 commit def0697
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions transport.c
Original file line number Diff line number Diff line change
Expand Up @@ -1369,11 +1369,11 @@ static int refs_from_alternate_cb(struct alternate_object_database *e,
while (other[len-1] == '/')
other[--len] = '\0';
if (len < 8 || memcmp(other + len - 8, "/objects", 8))
return 0;
goto out;
/* Is this a git repository with refs? */
memcpy(other + len - 8, "/refs", 6);
if (!is_directory(other))
return 0;
goto out;
other[len - 8] = '\0';
remote = remote_get(other);
transport = transport_get(remote, other);
Expand All @@ -1382,6 +1382,7 @@ static int refs_from_alternate_cb(struct alternate_object_database *e,
extra = extra->next)
cb->fn(extra, cb->data);
transport_disconnect(transport);
out:
free(other);
return 0;
}
Expand Down

0 comments on commit def0697

Please sign in to comment.