mirror of
https://github.com/python/cpython.git
synced 2025-09-22 08:23:36 +00:00
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:
parent
3dfe55b6ff
commit
cddcf444b2
4 changed files with 20 additions and 6 deletions
|
@ -2128,11 +2128,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.getrandbits, 0))
|
>>> dis(pickle.dumps(pickletools.dis, 0))
|
||||||
0: c GLOBAL 'random getrandbits'
|
0: c GLOBAL 'pickletools dis'
|
||||||
20: p PUT 0
|
17: p PUT 0
|
||||||
23: . STOP
|
20: . STOP
|
||||||
highest protocol among opcodes = 0
|
highest protocol among opcodes = 0
|
||||||
|
|
||||||
>>> from pickletools import _Example
|
>>> from pickletools import _Example
|
||||||
|
|
|
@ -545,6 +545,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 with proto 0
|
# make sure that floats are formatted locale independent with proto 0
|
||||||
|
|
|
@ -139,6 +139,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #1672332: fix unpickling of subnormal floats, which was
|
||||||
|
producing a ValueError on some platforms.
|
||||||
|
|
||||||
- Issue #3881: Help Tcl to load even when started through the
|
- Issue #3881: Help Tcl to load even when started through the
|
||||||
unreadable local symlink to "Program Files" on Vista.
|
unreadable local symlink to "Program Files" on Vista.
|
||||||
|
|
||||||
|
|
|
@ -2958,7 +2958,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, "could not convert string to float");
|
PyErr_SetString(PyExc_ValueError, "could not convert string to float");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue