⬢ DragonFlyBSD Kernel Audit
DF-5703 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/libkern/strtol.c b/sys/libkern/strtol.c
index ae87400..f000000 100644
--- a/sys/libkern/strtol.c
+++ b/sys/libkern/strtol.c
@@ -68,7 +68,8 @@ strtol(const char *nptr, char **endptr, int base)
 	} else if (c == '+')
 		c = *s++;
 	if ((base == 0 || base == 16) &&
-	    c == '0' && (*s == 'x' || *s == 'X')) {
+	    c == '0' && (*s == 'x' || *s == 'X') &&
+	    isxdigit((unsigned char)s[1])) {
 		c = s[1];
 		s += 2;
 		base = 16;
diff --git a/sys/libkern/strtoul.c b/sys/libkern/strtoul.c
index 52ef3e5..f000001 100644
--- a/sys/libkern/strtoul.c
+++ b/sys/libkern/strtoul.c
@@ -66,7 +66,8 @@ strtoul(const char *nptr, char **endptr, int base)
 	} else if (c == '+')
 		c = *s++;
 	if ((base == 0 || base == 16) &&
-	    c == '0' && (*s == 'x' || *s == 'X')) {
+	    c == '0' && (*s == 'x' || *s == 'X') &&
+	    isxdigit((unsigned char)s[1])) {
 		c = s[1];
 		s += 2;
 		base = 16;