瀏覽代碼

LibC: Fix strtol() not populating `endptr' for valid strings

We were not writing anything out to the `endptr` pointer if a number
was successfully parsed from the input string.

Fixes #460.
Andreas Kling 6 年之前
父節點
當前提交
266b9cb654
共有 1 個文件被更改,包括 5 次插入2 次删除
  1. 5 2
      Libraries/LibC/stdlib.cpp

+ 5 - 2
Libraries/LibC/stdlib.cpp

@@ -352,7 +352,8 @@ long strtol(const char* str, char** endptr, int base)
             }
         }
     }
-    const char* estr = str + strlen(str) - 1;
+    size_t length = strlen(str);
+    const char* estr = str + length - 1;
     long track = 1;
     long num = 0;
     while (estr >= str) {
@@ -362,12 +363,14 @@ long strtol(const char* str, char** endptr, int base)
                 digit_value = 10 + (*estr - 'A');
             num += (track *= base) / base * digit_value;
         } else {
-            if (endptr != NULL)
+            if (endptr)
                 *endptr = const_cast<char*>(estr);
             return 0;
         };
         estr--;
     }
+    if (endptr)
+        *endptr = const_cast<char*>(str + length);
     return num * sign;
 }