summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/stdlib')
-rw-r--r--lib/libc/stdlib/strtoimax.c6
-rw-r--r--lib/libc/stdlib/strtol.c6
-rw-r--r--lib/libc/stdlib/strtoll.c6
-rw-r--r--lib/libc/stdlib/strtoul.c6
-rw-r--r--lib/libc/stdlib/strtoull.c6
-rw-r--r--lib/libc/stdlib/strtoumax.c6
6 files changed, 30 insertions, 6 deletions
diff --git a/lib/libc/stdlib/strtoimax.c b/lib/libc/stdlib/strtoimax.c
index 0cb387b..147fce2 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 658628e..5aae7f9 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 2eb3a50..6cbe76a 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 2146a98..a8e3736 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 1720a8f..0e80b0d 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 ddaee59..91d5d07 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;
OpenPOWER on IntegriCloud