summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Deskin Miller <deskinm@umich.edu>2008-09-22 11:06:41 -0400
committerLibravatar Shawn O. Pearce <spearce@spearce.org>2008-09-24 08:58:14 -0700
commitdc4179f9a76473176eb473f6f568b0006c823fba (patch)
tree92f5313234d45db2628fb56d37c5e6171a46b09b
parentbuiltin-prune.c: prune temporary packs in <object_dir>/pack directory (diff)
downloadtgif-dc4179f9a76473176eb473f6f568b0006c823fba.tar.xz
maint: check return of split_cmdline to avoid bad config strings
As the testcase demonstrates, it's possible for split_cmdline to return -1 and deallocate any memory it's allocated, if the config string is missing an end quote. In both the cases below, which are the only calling sites, the return isn't checked, and using the pointer causes a pretty immediate segfault. Signed-off-by: Deskin Miller <deskinm@umich.edu> Acked-by: Miklos Vajna <vmiklos@frugalware.org> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rw-r--r--builtin-merge.c2
-rw-r--r--git.c2
-rwxr-xr-xt/t1300-repo-config.sh10
3 files changed, 14 insertions, 0 deletions
diff --git a/builtin-merge.c b/builtin-merge.c
index b280444e10..dcaf3681dc 100644
--- a/builtin-merge.c
+++ b/builtin-merge.c
@@ -442,6 +442,8 @@ static int git_merge_config(const char *k, const char *v, void *cb)
buf = xstrdup(v);
argc = split_cmdline(buf, &argv);
+ if (argc < 0)
+ die("Bad branch.%s.mergeoptions string", branch);
argv = xrealloc(argv, sizeof(*argv) * (argc + 2));
memmove(argv + 1, argv, sizeof(*argv) * (argc + 1));
argc++;
diff --git a/git.c b/git.c
index fdb0f71019..5582c515ac 100644
--- a/git.c
+++ b/git.c
@@ -162,6 +162,8 @@ static int handle_alias(int *argcp, const char ***argv)
alias_string + 1, alias_command);
}
count = split_cmdline(alias_string, &new_argv);
+ if (count < 0)
+ die("Bad alias.%s string", alias_command);
option_count = handle_options(&new_argv, &count, &envchanged);
if (envchanged)
die("alias '%s' changes environment variables\n"
diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh
index 64567fb94d..11b82f43dd 100755
--- a/t/t1300-repo-config.sh
+++ b/t/t1300-repo-config.sh
@@ -741,4 +741,14 @@ test_expect_success 'symlinked configuration' '
'
+test_expect_success 'check split_cmdline return' "
+ git config alias.split-cmdline-fix 'echo \"' &&
+ test_must_fail git split-cmdline-fix &&
+ echo foo > foo &&
+ git add foo &&
+ git commit -m 'initial commit' &&
+ git config branch.master.mergeoptions 'echo \"' &&
+ test_must_fail git merge master
+ "
+
test_done