]> git.ipfire.org Git - thirdparty/git.git/commitdiff
transport: fix leaks in refs_from_alternate_cb
authorJeff King <peff@peff.net>
Thu, 24 Jul 2014 04:41:30 +0000 (00:41 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 24 Jul 2014 20:57:50 +0000 (13:57 -0700)
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>
transport.c

index 325f03e1eef97df296bb1cc9f7d2d33c218dde26..e735633a6198a89927403fd832c4fb8a5f486abc 100644 (file)
@@ -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);
@@ -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;
 }