From: Mark Dickinson Date: Wed, 16 Jul 2008 11:04:17 +0000 (+0000) Subject: Issue #3360: Fix incorrect parsing of '020000000000.0'. X-Git-Tag: v2.5.3c1~78 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ab396e07cc7c6aff0723d406f3037b24645b6049;p=python Issue #3360: Fix incorrect parsing of '020000000000.0'. This is a backport of r65005. --- diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index 0aba1c213d..79127eb78d 100644 --- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -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 diff --git a/Misc/NEWS b/Misc/NEWS index fa9c9a6b6c..25ac14e700 100644 --- 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. diff --git a/Python/ast.c b/Python/ast.c index 057b64df32..434236b307 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -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);