Browse Source

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>
maint
Deskin Miller 16 years ago committed by Shawn O. Pearce
parent
commit
dc4179f9a7
  1. 2
      builtin-merge.c
  2. 2
      git.c
  3. 10
      t/t1300-repo-config.sh

2
builtin-merge.c

@ -442,6 +442,8 @@ static int git_merge_config(const char *k, const char *v, void *cb) @@ -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++;

2
git.c

@ -162,6 +162,8 @@ static int handle_alias(int *argcp, const char ***argv) @@ -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"

10
t/t1300-repo-config.sh

@ -741,4 +741,14 @@ test_expect_success 'symlinked configuration' ' @@ -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

Loading…
Cancel
Save