From 5b7ddc4bd2dcdde201ffa2681ede9a0a029bad96 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 2 Jul 2021 22:47:46 +0200 Subject: Adding upstream version 1.14. Signed-off-by: Daniel Baumann --- util/argconfig.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'util/argconfig.c') diff --git a/util/argconfig.c b/util/argconfig.c index f647448..341a049 100644 --- a/util/argconfig.c +++ b/util/argconfig.c @@ -31,13 +31,14 @@ #include "argconfig.h" #include "suffix.h" -#include +#include +#include #include +#include #include #include -#include #include -#include +#include static argconfig_help_func *help_funcs[MAX_HELP_FUNC] = { NULL }; @@ -450,10 +451,11 @@ int argconfig_parse_subopt_string(char *string, char **options, return 0; } -unsigned argconfig_parse_comma_sep_array(char *string, int *val, +int argconfig_parse_comma_sep_array(char *string, int *val, unsigned max_length) { - unsigned ret = 0; + int ret = 0; + unsigned long v; char *tmp; char *p; @@ -464,9 +466,14 @@ unsigned argconfig_parse_comma_sep_array(char *string, int *val, if (!tmp) return 0; - val[ret] = strtol(tmp, &p, 0); + v = strtoul(tmp, &p, 0); if (*p != 0) return -1; + if (v > UINT_MAX) { + fprintf(stderr, "%s out of range\n", tmp); + return -1; + } + val[ret] = v; ret++; while (1) { @@ -478,19 +485,23 @@ unsigned argconfig_parse_comma_sep_array(char *string, int *val, if (ret >= max_length) return -1; - val[ret] = strtol(tmp, &p, 0); - + v = strtoul(tmp, &p, 0); if (*p != 0) return -1; + if (v > UINT_MAX) { + fprintf(stderr, "%s out of range\n", tmp); + return -1; + } + val[ret] = v; ret++; } } -unsigned argconfig_parse_comma_sep_array_long(char *string, +int argconfig_parse_comma_sep_array_long(char *string, unsigned long long *val, unsigned max_length) { - unsigned ret = 0; + int ret = 0; char *tmp; char *p; -- cgit v1.2.3