]> granicus.if.org Git - python/commitdiff
Issue #3360: Fix incorrect parsing of '020000000000.0'.
authorMark Dickinson <dickinsm@gmail.com>
Wed, 16 Jul 2008 11:04:17 +0000 (11:04 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Wed, 16 Jul 2008 11:04:17 +0000 (11:04 +0000)
This is a backport of r65005.

Lib/test/test_compile.py
Misc/NEWS
Python/ast.c

index 0aba1c213d2db5793f97835eb99f845ec9c1216b..79127eb78d4c1ccf7ac879a38c5aca048461cf20 100644 (file)
@@ -209,6 +209,10 @@ if 1:
         self.assertEqual(eval("000000000000007"), 7)
         self.assertEqual(eval("000000000000008."), 8.)
         self.assertEqual(eval("000000000000009."), 9.)
+        self.assertEqual(eval("020000000000.0"), 20000000000.0)
+        self.assertEqual(eval("037777777777e0"), 37777777777.0)
+        self.assertEqual(eval("01000000000000000000000.0"),
+                         1000000000000000000000.0)
 
     def test_unary_minus(self):
         # Verify treatment of unary minus on negative numbers SF bug #660455
index fa9c9a6b6cf3e82ead0c0bd207ccdae388fb0ad3..25ac14e7003c061ecddebddec11634646b0385bf 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.5.3?
 Core and builtins
 -----------------
 
+- Issue #3360: Fix incorrect parsing of '020000000000.0', which
+  produced a ValueError instead of giving the correct float.
+
 - Issue #3242: Fix a crash inside the print statement, if sys.stdout is
   set to a custom object whose write() method happens to install
   another file in sys.stdout.
index 057b64df32583dfafba6cb19a9fce0b79d0393fd..434236b307edc62bad27cc0ea9cd1cb15c6f306d 100644 (file)
@@ -3067,16 +3067,7 @@ parsenumber(const char *s)
 #endif
        if (*end == 'l' || *end == 'L')
                return PyLong_FromString((char *)s, (char **)0, 0);
-       if (s[0] == '0') {
-               x = (long) PyOS_strtoul((char *)s, (char **)&end, 0);
-               if (x < 0 && errno == 0) {
-                               return PyLong_FromString((char *)s,
-                                                        (char **)0,
-                                                        0);
-               }
-       }
-       else
-               x = PyOS_strtol((char *)s, (char **)&end, 0);
+       x = PyOS_strtol((char *)s, (char **)&end, 0);
        if (*end == '\0') {
                if (errno != 0)
                        return PyLong_FromString((char *)s, (char **)0, 0);