about summary refs log tree commit diff
path: root/argp
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2021-01-07 02:06:18 +0100
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2021-02-04 16:44:26 -0300
commite9f63b512621fec9fc794719506dd306f3eaa39d (patch)
tree9769bdb16f2b7fd75eb827f97bc70cddc00d9906 /argp
parent1b3fc33f810b605e0e6dfcba96dddae432ccaab3 (diff)
downloadglibc-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.c14
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;
 }