aboutsummaryrefslogtreecommitdiffstats
path: root/alias.c
diff options
context:
space:
mode:
authorTaylor Blau <me@ttaylorr.com>2022-10-06 17:40:44 -0400
committerTaylor Blau <me@ttaylorr.com>2022-10-06 17:40:44 -0400
commit9cbd2827c5a19d935054cdb162e53e5703be09f4 (patch)
treef7850cda5827aacd30b18b9d9f6494d46d3dc4d6 /alias.c
parentt2080: prepare for changing protocol.file.allow (diff)
parentGit 2.31.5 (diff)
downloadgit-9cbd2827c5a19d935054cdb162e53e5703be09f4.tar.gz
git-9cbd2827c5a19d935054cdb162e53e5703be09f4.zip
Sync with 2.31.5
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Diffstat (limited to 'alias.c')
-rw-r--r--alias.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/alias.c b/alias.c
index c471538020..00abde0817 100644
--- a/alias.c
+++ b/alias.c
@@ -46,14 +46,16 @@ void list_aliases(struct string_list *list)
#define SPLIT_CMDLINE_BAD_ENDING 1
#define SPLIT_CMDLINE_UNCLOSED_QUOTE 2
+#define SPLIT_CMDLINE_ARGC_OVERFLOW 3
static const char *split_cmdline_errors[] = {
N_("cmdline ends with \\"),
- N_("unclosed quote")
+ N_("unclosed quote"),
+ N_("too many arguments"),
};
int split_cmdline(char *cmdline, const char ***argv)
{
- int src, dst, count = 0, size = 16;
+ size_t src, dst, count = 0, size = 16;
char quoted = 0;
ALLOC_ARRAY(*argv, size);
@@ -96,6 +98,11 @@ int split_cmdline(char *cmdline, const char ***argv)
return -SPLIT_CMDLINE_UNCLOSED_QUOTE;
}
+ if (count >= INT_MAX) {
+ FREE_AND_NULL(*argv);
+ return -SPLIT_CMDLINE_ARGC_OVERFLOW;
+ }
+
ALLOC_GROW(*argv, count + 1, size);
(*argv)[count] = NULL;