]> git.saurik.com Git - wxWidgets.git/commitdiff
check for under/overflow in ToLong/ULong/Double() as well
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 28 Oct 2006 14:58:56 +0000 (14:58 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 28 Oct 2006 14:58:56 +0000 (14:58 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42573 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/string.cpp

index c2bab603e26cf52cb7844689add9f9fdfc078df7..418fc9f0779f585285fb2d8586606351d6b138cf 100644 (file)
@@ -35,6 +35,7 @@
 #endif
 
 #include <ctype.h>
+#include <errno.h>
 #include <string.h>
 #include <stdlib.h>
 
@@ -1684,8 +1685,8 @@ bool wxString::ToLong(long *val, int base) const
     *val = wxStrtol(start, &end, base);
 
     // return true only if scan was stopped by the terminating NUL and if the
-    // string was not empty to start with
-    return !*end && (end != start);
+    // string was not empty to start with and no under/overflow occurred
+    return !*end && (end != start) && (errno != ERANGE);
 }
 
 bool wxString::ToULong(unsigned long *val, int base) const
@@ -1698,8 +1699,8 @@ bool wxString::ToULong(unsigned long *val, int base) const
     *val = wxStrtoul(start, &end, base);
 
     // return true only if scan was stopped by the terminating NUL and if the
-    // string was not empty to start with
-    return !*end && (end != start);
+    // string was not empty to start with and no overflow occurred
+    return !*end && (end != start) && (errno != ERANGE);
 }
 
 bool wxString::ToDouble(double *val) const
@@ -1711,8 +1712,8 @@ bool wxString::ToDouble(double *val) const
     *val = wxStrtod(start, &end);
 
     // return true only if scan was stopped by the terminating NUL and if the
-    // string was not empty to start with
-    return !*end && (end != start);
+    // string was not empty to start with and no under/overflow occurred
+    return !*end && (end != start) && (errno != ERANGE);
 }
 
 // ---------------------------------------------------------------------------