]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
replace atoi with stroul in c_parser_gimple_parse_bb_spec [PR114541]
authorHeiko Eißfeldt <heiko@hexco.de>
Mon, 9 Dec 2024 09:39:50 +0000 (10:39 +0100)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 9 Dec 2024 12:16:49 +0000 (13:16 +0100)
The full treatment of these invalid values was considered out of
scope for this patch.

PR c/114541
* gimple-parser.cc (c_parser_gimple_parse_bb_spec):
Use strtoul with ERANGE check instead of atoi to avoid UB
and detect invalid __BB#.

Signed-off-by: Heiko Eißfeldt <heiko@hexco.de>
gcc/c/gimple-parser.cc

index 78e85d934879c4923e6606f62abc9353d573f080..1a677fc26c78c4188ba1ea0f9a343c712415b915 100644 (file)
@@ -133,11 +133,21 @@ c_parser_gimple_parse_bb_spec (tree val, int *index)
 {
   if (!startswith (IDENTIFIER_POINTER (val), "__BB"))
     return false;
-  for (const char *p = IDENTIFIER_POINTER (val) + 4; *p; ++p)
-    if (!ISDIGIT (*p))
-      return false;
-  *index = atoi (IDENTIFIER_POINTER (val) + 4);
-  return *index > 0;
+
+  const char *bb = IDENTIFIER_POINTER (val) + 4;
+  if (! ISDIGIT (*bb))
+    return false;
+
+  char *pend;
+  errno = 0;
+  const unsigned long number = strtoul (bb, &pend, 10);
+  if (errno == ERANGE
+      || *pend != '\0'
+      || number > INT_MAX)
+    return false;
+
+  *index = number;
+  return true;
 }
 
 /* See if VAL is an identifier matching __BB<num> and return <num>