diff --git a/lib/libc/stdlib/strtoimax.c b/lib/libc/stdlib/strtoimax.c index 0cb387b64ad9..147fce2b98a3 100644 --- a/lib/libc/stdlib/strtoimax.c +++ b/lib/libc/stdlib/strtoimax.c @@ -75,7 +75,11 @@ strtoimax(const char * __restrict nptr, char ** __restrict endptr, int base) c = *s++; } if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X')) { + c == '0' && (*s == 'x' || *s == 'X') && + ((s[1] >= 'a' && s[1] <= 'f') || + (s[1] >= 'A' && s[1] <= 'F') || + (s[1] >= '0' && s[1] <= '9')) + ) { c = s[1]; s += 2; base = 16; diff --git a/lib/libc/stdlib/strtol.c b/lib/libc/stdlib/strtol.c index 658628e370c6..5aae7f9dc0bc 100644 --- a/lib/libc/stdlib/strtol.c +++ b/lib/libc/stdlib/strtol.c @@ -76,7 +76,11 @@ strtol(const char * __restrict nptr, char ** __restrict endptr, int base) c = *s++; } if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X')) { + c == '0' && (*s == 'x' || *s == 'X') && + ((s[1] >= 'a' && s[1] <= 'f') || + (s[1] >= 'A' && s[1] <= 'F') || + (s[1] >= '0' && s[1] <= '9')) + ) { c = s[1]; s += 2; base = 16; diff --git a/lib/libc/stdlib/strtoll.c b/lib/libc/stdlib/strtoll.c index 2eb3a509a58c..6cbe76abae99 100644 --- a/lib/libc/stdlib/strtoll.c +++ b/lib/libc/stdlib/strtoll.c @@ -75,7 +75,11 @@ strtoll(const char * __restrict nptr, char ** __restrict endptr, int base) c = *s++; } if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X')) { + c == '0' && (*s == 'x' || *s == 'X') && + ((s[1] >= 'a' && s[1] <= 'f') || + (s[1] >= 'A' && s[1] <= 'F') || + (s[1] >= '0' && s[1] <= '9')) + ) { c = s[1]; s += 2; base = 16; diff --git a/lib/libc/stdlib/strtoul.c b/lib/libc/stdlib/strtoul.c index 2146a98b8ac0..a8e37364101b 100644 --- a/lib/libc/stdlib/strtoul.c +++ b/lib/libc/stdlib/strtoul.c @@ -73,7 +73,11 @@ strtoul(const char * __restrict nptr, char ** __restrict endptr, int base) c = *s++; } if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X')) { + c == '0' && (*s == 'x' || *s == 'X') && + ((s[1] >= 'a' && s[1] <= 'f') || + (s[1] >= 'A' && s[1] <= 'F') || + (s[1] >= '0' && s[1] <= '9')) + ) { c = s[1]; s += 2; base = 16; diff --git a/lib/libc/stdlib/strtoull.c b/lib/libc/stdlib/strtoull.c index 1720a8f6571c..0e80b0d51295 100644 --- a/lib/libc/stdlib/strtoull.c +++ b/lib/libc/stdlib/strtoull.c @@ -73,7 +73,11 @@ strtoull(const char * __restrict nptr, char ** __restrict endptr, int base) c = *s++; } if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X')) { + c == '0' && (*s == 'x' || *s == 'X') && + ((s[1] >= 'a' && s[1] <= 'f') || + (s[1] >= 'A' && s[1] <= 'F') || + (s[1] >= '0' && s[1] <= '9')) + ) { c = s[1]; s += 2; base = 16; diff --git a/lib/libc/stdlib/strtoumax.c b/lib/libc/stdlib/strtoumax.c index ddaee5935a4b..91d5d07ea4c8 100644 --- a/lib/libc/stdlib/strtoumax.c +++ b/lib/libc/stdlib/strtoumax.c @@ -73,7 +73,11 @@ strtoumax(const char * __restrict nptr, char ** __restrict endptr, int base) c = *s++; } if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X')) { + c == '0' && (*s == 'x' || *s == 'X') && + ((s[1] >= 'a' && s[1] <= 'f') || + (s[1] >= 'A' && s[1] <= 'F') || + (s[1] >= '0' && s[1] <= '9')) + ) { c = s[1]; s += 2; base = 16;