aboutsummaryrefslogtreecommitdiff
path: root/alias.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2009-05-08 05:06:15 -0400
committerJunio C Hamano <gitster@pobox.com>2009-05-09 01:39:40 -0700
commit27d5438d9f4eb2cefc2a989c68f9b42b529b2a12 (patch)
tree10f41e0160a28b93dcdc6814fc4a3e2fe0eb9fbb /alias.c
parent2c5b0115038ab283b346fbb8059b93973ff4c8f2 (diff)
downloadgit-27d5438d9f4eb2cefc2a989c68f9b42b529b2a12.tar.gz
git-27d5438d9f4eb2cefc2a989c68f9b42b529b2a12.tar.xz
fix GIT_TRACE segfault with shell-quoted aliases
The alias argv comes from the split_cmdline function, which splits the config text for the alias into an array of strings. It returns the number of elements in the array, but does not actually put a NULL at the end of the array. Later, the trace function tries to print this argv and assumes that it has the trailing NULL. The split_cmdline function is probably at fault, since argv lists almost always end with a NULL signal. This patch adds one, in addition to the returned count; this doesn't hurt the other callers at all, since they were presumably using the count already (and will never look at the NULL). While we're there and using ALLOC_GROW, let's clean up the other manual grow. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'alias.c')
-rw-r--r--alias.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/alias.c b/alias.c
index ccb1108c9..4f4d0141c 100644
--- a/alias.c
+++ b/alias.c
@@ -38,10 +38,7 @@ int split_cmdline(char *cmdline, const char ***argv)
while (cmdline[++src]
&& isspace(cmdline[src]))
; /* skip */
- if (count >= size) {
- size += 16;
- *argv = xrealloc(*argv, sizeof(char*) * size);
- }
+ ALLOC_GROW(*argv, count+1, size);
(*argv)[count++] = cmdline + dst;
} else if (!quoted && (c == '\'' || c == '"')) {
quoted = c;
@@ -72,6 +69,9 @@ int split_cmdline(char *cmdline, const char ***argv)
return error("unclosed quote");
}
+ ALLOC_GROW(*argv, count+1, size);
+ (*argv)[count] = NULL;
+
return count;
}