]> git.scripts.mit.edu Git - git.git/commitdiff
remote: do not copy "origin" string literal
authorJeff King <peff@peff.net>
Tue, 24 Sep 2013 05:19:08 +0000 (01:19 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 15 Oct 2013 21:46:31 +0000 (14:46 -0700)
Our default_remote_name starts at "origin", but may be
overridden by the config file. In the former case, we
allocate a new string, but in the latter case, we point to
the remote name in an existing "struct branch".

This gives the variable inconsistent free() semantics (we
are sometimes responsible for freeing the string and
sometimes pointing to somebody else's storage), and causes a
small leak when the allocated string is overridden by
config.

We can fix both by simply dropping the extra copy and
pointing to the string literal.

Noticed-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
remote.c

index efcba931eca963bd6a5fd13f01a4859e0ae9e14d..ffd1a6523e881938d3f8f78de43430010543e2b7 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -480,7 +480,7 @@ static void read_config(void)
        int flag;
        if (default_remote_name) /* did this already */
                return;
-       default_remote_name = xstrdup("origin");
+       default_remote_name = "origin";
        current_branch = NULL;
        head_ref = resolve_ref_unsafe("HEAD", sha1, 0, &flag);
        if (head_ref && (flag & REF_ISSYMREF) &&