From: Heiko Eißfeldt Date: Mon, 9 Dec 2024 09:39:50 +0000 (+0100) Subject: replace atoi with stroul in c_parser_gimple_parse_bb_spec [PR114541] X-Git-Tag: basepoints/gcc-16~3514 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2b8ecbfe2ce6558637d42fdcb7efb3f878feb56b;p=thirdparty%2Fgcc.git replace atoi with stroul in c_parser_gimple_parse_bb_spec [PR114541] 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 --- diff --git a/gcc/c/gimple-parser.cc b/gcc/c/gimple-parser.cc index 78e85d934879..1a677fc26c78 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 and return