Merged revisions 68903,68906 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r68903 | mark.dickinson | 2009-01-24 16:40:29 +0000 (Sat, 24 Jan 2009) | 5 lines

  Issue #1672332: Fix unpickling of subnormal floats, which was raising
  ValueError on some platforms as a result of the platform strtod setting
  errno on underflow.
........
  r68906 | mark.dickinson | 2009-01-24 21:08:38 +0000 (Sat, 24 Jan 2009) | 2 lines

  Issue #3657: fix occasional test_pickletools failures.
........
This commit is contained in:
Mark Dickinson 2009-01-24 21:30:14 +00:00
parent 42f612a19b
commit 3df16920eb
4 changed files with 20 additions and 6 deletions

View File

@ -2083,11 +2083,11 @@ highest protocol among opcodes = 1
Exercise the INST/OBJ/BUILD family. Exercise the INST/OBJ/BUILD family.
>>> import random >>> import pickletools
>>> dis(pickle.dumps(random.random, 0)) >>> dis(pickle.dumps(pickletools.dis, 0))
0: c GLOBAL 'random random' 0: c GLOBAL 'pickletools dis'
15: p PUT 0 17: p PUT 0
18: . STOP 20: . STOP
highest protocol among opcodes = 0 highest protocol among opcodes = 0
>>> from pickletools import _Example >>> from pickletools import _Example

View File

@ -535,6 +535,16 @@ class AbstractPickleTests(unittest.TestCase):
got = self.loads(p) got = self.loads(p)
self.assertEqual(n, got) self.assertEqual(n, got)
def test_float(self):
test_values = [0.0, 4.94e-324, 1e-310, 7e-308, 6.626e-34, 0.1, 0.5,
3.14, 263.44582062374053, 6.022e23, 1e30]
test_values = test_values + [-x for x in test_values]
for proto in protocols:
for value in test_values:
pickle = self.dumps(value, proto)
got = self.loads(pickle)
self.assertEqual(value, got)
@run_with_locale('LC_ALL', 'de_DE', 'fr_FR') @run_with_locale('LC_ALL', 'de_DE', 'fr_FR')
def test_float_format(self): def test_float_format(self):
# make sure that floats are formatted locale independent # make sure that floats are formatted locale independent

View File

@ -194,6 +194,9 @@ Core and Builtins
Library Library
------- -------
- Issue #1672332: fix unpickling of subnormal floats, which was
producing a ValueError on some platforms.
- Restore Python 2.3 compatibility for decimal.py. - Restore Python 2.3 compatibility for decimal.py.
- Issue #1702551: distutils sdist was not excluding VCS directories under - Issue #1702551: distutils sdist was not excluding VCS directories under

View File

@ -3465,7 +3465,8 @@ load_float(Unpicklerobject *self)
errno = 0; errno = 0;
d = PyOS_ascii_strtod(s, &endptr); d = PyOS_ascii_strtod(s, &endptr);
if (errno || (endptr[0] != '\n') || (endptr[1] != '\0')) { if ((errno == ERANGE && !(fabs(d) <= 1.0)) ||
(endptr[0] != '\n') || (endptr[1] != '\0')) {
PyErr_SetString(PyExc_ValueError, PyErr_SetString(PyExc_ValueError,
"could not convert string to float"); "could not convert string to float");
goto finally; goto finally;