mirror of
https://github.com/python/cpython.git
synced 2025-07-29 06:05:00 +00:00
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.
This commit is contained in:
parent
c187d11af3
commit
a3ecd2c668
3 changed files with 15 additions and 1 deletions
|
@ -535,6 +535,16 @@ class AbstractPickleTests(unittest.TestCase):
|
|||
got = self.loads(p)
|
||||
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')
|
||||
def test_float_format(self):
|
||||
# make sure that floats are formatted locale independent
|
||||
|
|
|
@ -145,6 +145,9 @@ Core and Builtins
|
|||
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
|
||||
unreadable local symlink to "Program Files" on Vista.
|
||||
|
||||
|
|
|
@ -3465,7 +3465,8 @@ load_float(Unpicklerobject *self)
|
|||
errno = 0;
|
||||
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");
|
||||
goto finally;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue