[PATCH] Return EINVAL for illegal base in strtol

Keith Packard <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
Signed-off-by: Keith Packard <[email protected]>
---
 newlib/libc/stdlib/strtol.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/newlib/libc/stdlib/strtol.c b/newlib/libc/stdlib/strtol.c
index f7572b169..897890fe0 100644
--- a/newlib/libc/stdlib/strtol.c
+++ b/newlib/libc/stdlib/strtol.c
@@ -140,6 +140,11 @@ _strtol_l (struct _reent *rptr, const char *__restrict nptr,
 	register unsigned long cutoff;
 	register int neg = 0, any, cutlim;
 
+	if (base < 0 || base == 1 || base > 36) {
+		errno = EINVAL;
+		return 0;
+	}
+
 	/*
 	 * Skip white space and pick up leading +/- sign if any.
 	 * If base is 0, allow 0x for hex and 0 for octal, else
@@ -193,9 +198,9 @@ _strtol_l (struct _reent *rptr, const char *__restrict nptr,
 			break;
 		if (c >= base)
 			break;
-               if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
+		if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) {
 			any = -1;
-		else {
+		} else {
 			any = 1;
 			acc *= base;
 			acc += c;
-- 
2.24.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.