On 12/9/24 10:15 AM, Richard Biener wrote:
Can you send the patch in git format-patch format please so that
it includes the commit message and Author tag and I can git am
for pushing? At least you are not listed in MAINTAINERS and thus
likely do not have git commit access?
Yes, currently I do not have no commit access.
Here it comes:
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#. The full treatment of these invalid
values was considered out of scope for this patch.
From ff0185eda60bec92f0e850090d2e5b8ab54710a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Heiko=20Ei=C3=9Ffeldt?= <[email protected]>
Date: Mon, 9 Dec 2024 10:39:50 +0100
Subject: [PATCH] replace atoi with stroul in c_parser_gimple_parse_bb_spec
[PR114541]
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Heiko Eißfeldt <[email protected]>
---
gcc/c/gimple-parser.cc | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/gcc/c/gimple-parser.cc b/gcc/c/gimple-parser.cc
index 78e85d93487..1a677fc26c7 100644
--- a/gcc/c/gimple-parser.cc
+++ b/gcc/c/gimple-parser.cc
@@ -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>
--
2.47.1