diff options
author | Jeff King <peff@peff.net> | 2009-05-08 05:06:15 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-05-09 01:39:40 -0700 |
commit | 27d5438d9f4eb2cefc2a989c68f9b42b529b2a12 (patch) | |
tree | 10f41e0160a28b93dcdc6814fc4a3e2fe0eb9fbb | |
parent | dir.c: Fix two minor grammatical errors in comments (diff) | |
download | tgif-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>
-rw-r--r-- | alias.c | 8 |
1 files changed, 4 insertions, 4 deletions
@@ -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; } |