Merge branch 'jk/misc-fixes-maint'
authorJunio C Hamano <gitster@pobox.com>
Mon, 28 Jul 2014 18:30:41 +0000 (11:30 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 28 Jul 2014 18:30:41 +0000 (11:30 -0700)
* jk/misc-fixes-maint:
apply: avoid possible bogus pointer
fix memory leak parsing core.commentchar
transport: fix leaks in refs_from_alternate_cb
free ref string returned by dwim_ref
receive-pack: don't copy "dir" parameter

builtin/apply.c
builtin/receive-pack.c
builtin/rev-parse.c
builtin/show-branch.c
config.c
sha1_name.c
transport.c
index 9f8f5bac072661adf9b911b091ab4202796e9a9e..be2b4ce2fd91640379b0a65d0aa90238d7edfd64 100644 (file)
@@ -1075,7 +1075,7 @@ static int gitdiff_index(const char *line, struct patch *patch)
 
        line = ptr + 2;
        ptr = strchr(line, ' ');
-       eol = strchr(line, '\n');
+       eol = strchrnul(line, '\n');
 
        if (!ptr || eol < ptr)
                ptr = eol;
index 92561bffc1ea4ba11d3fd45aa3e216edda3461f7..f93ac454b4133f5c1e7cb1675a618b4c0b3174cd 100644 (file)
@@ -1122,7 +1122,7 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
        int advertise_refs = 0;
        int stateless_rpc = 0;
        int i;
-       char *dir = NULL;
+       const char *dir = NULL;
        struct command *commands;
        struct sha1_array shallow = SHA1_ARRAY_INIT;
        struct sha1_array ref = SHA1_ARRAY_INIT;
@@ -1157,7 +1157,7 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
                }
                if (dir)
                        usage(receive_pack_usage);
-               dir = xstrdup(arg);
+               dir = arg;
        }
        if (!dir)
                usage(receive_pack_usage);
index 8102aaa9248d55055761f9899903cac2a2c7cc1e..d85e08cc9cc22ee307470dbeb12fdd8d1eea655b 100644 (file)
@@ -151,6 +151,7 @@ static void show_rev(int type, const unsigned char *sha1, const char *name)
                                error("refname '%s' is ambiguous", name);
                                break;
                        }
+                       free(full);
                } else {
                        show_with_type(type, name);
                }
index 5fd4e4e48839a9dc2998d3fba0e48008b902b12a..298c95e3f8b03e7f89d7767407ca8cee3eecc591 100644 (file)
@@ -777,6 +777,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
                        sprintf(nth_desc, "%s@{%d}", *av, base+i);
                        append_ref(nth_desc, sha1, 1);
                }
+               free(ref);
        }
        else if (all_heads + all_remotes)
                snarf_refs(all_heads, all_remotes);
index 9767c4bad0d0ae4af58a5f1e7f14d124d1174e10..058505cb8d8d8bb531527b620125b0204732458a 100644 (file)
--- a/config.c
+++ b/config.c
@@ -817,14 +817,12 @@ static int git_default_core_config(const char *var, const char *value)
                return git_config_string(&editor_program, var, value);
 
        if (!strcmp(var, "core.commentchar")) {
-               const char *comment;
-               int ret = git_config_string(&comment, var, value);
-               if (ret)
-                       return ret;
-               else if (!strcasecmp(comment, "auto"))
+               if (!value)
+                       return config_error_nonbool(var);
+               else if (!strcasecmp(value, "auto"))
                        auto_comment_line_char = 1;
-               else if (comment[0] && !comment[1]) {
-                       comment_line_char = comment[0];
+               else if (value[0] && !value[1]) {
+                       comment_line_char = value[0];
                        auto_comment_line_char = 0;
                } else
                        return error("core.commentChar should only be one character");
index 6ccd3a53f8fc6130000c4bf3ba4cd646f512de53..63ee66fedd617e2cacfae7a763f43ee600d15273 100644 (file)
@@ -540,8 +540,10 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1)
                        char *tmp = xstrndup(str + at + 2, reflog_len);
                        at_time = approxidate_careful(tmp, &errors);
                        free(tmp);
-                       if (errors)
+                       if (errors) {
+                               free(real_ref);
                                return -1;
+                       }
                }
                if (read_ref_at(real_ref, at_time, nth, sha1, NULL,
                                &co_time, &co_tz, &co_cnt)) {
index 80ed1262c29e8e3ec1443e06383c4ee9b7d14173..662421bb5e076177f0fc320330287d3da50303a5 100644 (file)
@@ -1357,11 +1357,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);
@@ -1370,6 +1370,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;
 }