From 2dce92236b9fe0a9398287ac7c62f2f4e67d53b6 Mon Sep 17 00:00:00 2001
From: Anton Kling <anton@kling.gg>
Date: Fri, 22 Nov 2024 23:00:55 +0100
Subject: libc: Fix bugs in strto(u)l(l)

---
 userland/libc/stdlib/strtoll.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

(limited to 'userland/libc/stdlib/strtoll.c')

diff --git a/userland/libc/stdlib/strtoll.c b/userland/libc/stdlib/strtoll.c
index d1eacde..0e397ff 100644
--- a/userland/libc/stdlib/strtoll.c
+++ b/userland/libc/stdlib/strtoll.c
@@ -44,12 +44,15 @@ long long strtoll(const char *str, char **restrict endptr, int base) {
 
   if (2 <= base && 36 >= base) {
     for (; *str; str++) {
+      int val = get_value(*str, base);
+      if(-1 == val) {
+        break;
+      }
       if (ret_value > LLONG_MAX / base) {
         errno = ERANGE;
         return LLONG_MAX;
       }
       ret_value *= base;
-      int val = get_value(*str, base);
       if (ret_value > LLONG_MAX - val) {
         errno = ERANGE;
         return LLONG_MAX;
-- 
cgit v1.2.3