diff options
author | Bruno Haible <bruno@clisp.org> | 2021-01-07 02:06:18 +0100 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-02-04 16:44:26 -0300 |
commit | e9f63b512621fec9fc794719506dd306f3eaa39d (patch) | |
tree | 9769bdb16f2b7fd75eb827f97bc70cddc00d9906 /argp | |
parent | 1b3fc33f810b605e0e6dfcba96dddae432ccaab3 (diff) | |
download | glibc-e9f63b512621fec9fc794719506dd306f3eaa39d.tar.gz glibc-e9f63b512621fec9fc794719506dd306f3eaa39d.tar.xz glibc-e9f63b512621fec9fc794719506dd306f3eaa39d.zip |
argp: Don't pass invalid arguments to isspace, isalnum, isalpha, isdigit.
* lib/argp-help.c (SKIPWS): Cast character to 'unsigned char' before passing it to isspace(). (fill_in_uparams): Likewise for isalpha(), isalnum(), isdigit(). (canon_doc_option): Likewise for isspace(), isalnum(). Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'argp')
-rw-r--r-- | argp/argp-help.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/argp/argp-help.c b/argp/argp-help.c index 5844d5ba1c..d686a2349f 100644 --- a/argp/argp-help.c +++ b/argp/argp-help.c @@ -166,7 +166,7 @@ fill_in_uparams (const struct argp_state *state) { const char *var = getenv ("ARGP_HELP_FMT"); -#define SKIPWS(p) do { while (isspace (*p)) p++; } while (0); +#define SKIPWS(p) do { while (isspace ((unsigned char) *p)) p++; } while (0); if (var) /* Parse var. */ @@ -174,14 +174,14 @@ fill_in_uparams (const struct argp_state *state) { SKIPWS (var); - if (isalpha (*var)) + if (isalpha ((unsigned char) *var)) { size_t var_len; const struct uparam_name *un; int unspec = 0, val = 0; const char *arg = var; - while (isalnum (*arg) || *arg == '-' || *arg == '_') + while (isalnum ((unsigned char) *arg) || *arg == '-' || *arg == '_') arg++; var_len = arg - var; @@ -206,10 +206,10 @@ fill_in_uparams (const struct argp_state *state) else val = 1; } - else if (isdigit (*arg)) + else if (isdigit ((unsigned char) *arg)) { val = atoi (arg); - while (isdigit (*arg)) + while (isdigit ((unsigned char) *arg)) arg++; SKIPWS (arg); } @@ -713,12 +713,12 @@ canon_doc_option (const char **name) { int non_opt; /* Skip initial whitespace. */ - while (isspace (**name)) + while (isspace ((unsigned char) **name)) (*name)++; /* Decide whether this looks like an option (leading `-') or not. */ non_opt = (**name != '-'); /* Skip until part of name used for sorting. */ - while (**name && !isalnum (**name)) + while (**name && !isalnum ((unsigned char) **name)) (*name)++; return non_opt; } |