summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2014-07-28 11:30:41 -0700
committerJunio C Hamano <gitster@pobox.com>2014-07-28 11:30:41 -0700
commitad524f834a9acaaaceeb846d00ea609f79333a3d (patch)
tree2b6a49037e48602c34dea27d19e0668ed8c35724
parent919eb8acea61fc461e69e2383e6290b4c3991c96 (diff)
parent31bb6d37f992128eca3707d4f58ec61425742e81 (diff)
downloadgit-ad524f834a9acaaaceeb846d00ea609f79333a3d.tar.gz
Merge branch 'jk/misc-fixes-maint'
* 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
-rw-r--r--builtin/apply.c2
-rw-r--r--builtin/receive-pack.c4
-rw-r--r--builtin/rev-parse.c1
-rw-r--r--builtin/show-branch.c1
-rw-r--r--config.c12
-rw-r--r--sha1_name.c4
-rw-r--r--transport.c5
7 files changed, 16 insertions, 13 deletions
diff --git a/builtin/apply.c b/builtin/apply.c
index 9f8f5bac07..be2b4ce2fd 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c
@@ -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;
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index 92561bffc1..f93ac454b4 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -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);
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index 8102aaa924..d85e08cc9c 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -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);
}
diff --git a/builtin/show-branch.c b/builtin/show-branch.c
index 5fd4e4e488..298c95e3f8 100644
--- a/builtin/show-branch.c
+++ b/builtin/show-branch.c
@@ -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);
diff --git a/config.c b/config.c
index 9767c4bad0..058505cb8d 100644
--- 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");
diff --git a/sha1_name.c b/sha1_name.c
index 6ccd3a53f8..63ee66fedd 100644
--- a/sha1_name.c
+++ b/sha1_name.c
@@ -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)) {
diff --git a/transport.c b/transport.c
index 80ed1262c2..662421bb5e 100644
--- a/transport.c
+++ b/transport.c
@@ -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;
}