Issue #3360: Fix incorrect parsing of "020000000000.0".

This commit is contained in:
Mark Dickinson 2008-07-16 09:40:03 +00:00
parent c83f113c8a
commit 64b7e501f4
3 changed files with 8 additions and 10 deletions

View File

@ -215,6 +215,10 @@ if 1:
self.assertEqual(eval("-0b000000000010"), -2) self.assertEqual(eval("-0b000000000010"), -2)
self.assertEqual(eval("0o777"), 511) self.assertEqual(eval("0o777"), 511)
self.assertEqual(eval("-0o0000010"), -8) self.assertEqual(eval("-0o0000010"), -8)
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): def test_unary_minus(self):
# Verify treatment of unary minus on negative numbers SF bug #660455 # Verify treatment of unary minus on negative numbers SF bug #660455

View File

@ -10,6 +10,9 @@ What's New in Python 2.6 beta 2?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #3360: Fix incorrect parsing of '020000000000.0', which
produced a ValueError instead of giving the correct float.
- Issue #3083: Add alternate (#) formatting for bin, oct, hex output - Issue #3083: Add alternate (#) formatting for bin, oct, hex output
for str.format(). This adds the prefix 0b, 0o, or 0x, respectively. for str.format(). This adds the prefix 0b, 0o, or 0x, respectively.

View File

@ -3139,16 +3139,7 @@ parsenumber(struct compiling *c, const char *s)
#endif #endif
if (*end == 'l' || *end == 'L') if (*end == 'l' || *end == 'L')
return PyLong_FromString((char *)s, (char **)0, 0); return PyLong_FromString((char *)s, (char **)0, 0);
if (s[0] == '0') { x = PyOS_strtol((char *)s, (char **)&end, 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);
if (*end == '\0') { if (*end == '\0') {
if (errno != 0) if (errno != 0)
return PyLong_FromString((char *)s, (char **)0, 0); return PyLong_FromString((char *)s, (char **)0, 0);