Kaydet (Commit) 968f1690 authored tarafından Mark Dickinson's avatar Mark Dickinson

#Issue 6795: Fix infinite recursion in long(Decimal('nan')); change…

#Issue 6795:  Fix infinite recursion in long(Decimal('nan'));  change int(Decimal('nan')) to raise ValueError instead of either returning NaN or raising InvalidContext.
üst 491ea55f
......@@ -1555,10 +1555,9 @@ class Decimal(object):
"""Converts self to an int, truncating if necessary."""
if self._is_special:
if self._isnan():
context = getcontext()
return context._raise_error(InvalidContext)
raise ValueError("Cannot convert NaN to integer")
elif self._isinfinity():
raise OverflowError("Cannot convert infinity to int")
raise OverflowError("Cannot convert infinity to integer")
s = (-1)**self._sign
if self._exp >= 0:
return s*int(self._int)*10**self._exp
......
......@@ -1489,6 +1489,16 @@ class DecimalPythonAPItests(unittest.TestCase):
r = d.to_integral(ROUND_DOWN)
self.assertEqual(Decimal(int(d)), r)
self.assertRaises(ValueError, int, Decimal('-nan'))
self.assertRaises(ValueError, int, Decimal('snan'))
self.assertRaises(OverflowError, int, Decimal('inf'))
self.assertRaises(OverflowError, int, Decimal('-inf'))
self.assertRaises(ValueError, long, Decimal('-nan'))
self.assertRaises(ValueError, long, Decimal('snan'))
self.assertRaises(OverflowError, long, Decimal('inf'))
self.assertRaises(OverflowError, long, Decimal('-inf'))
def test_trunc(self):
for x in range(-250, 250):
s = '%0.2f' % (x / 100.0)
......
......@@ -366,6 +366,10 @@ Core and Builtins
Library
-------
- Issue #6795: int(Decimal('nan')) now raises ValueError instead of
returning NaN or raising InvalidContext. Also, fix infinite recursion
in long(Decimal('nan')).
- Issue #6850: Fix bug in Decimal._parse_format_specifier for formats
with no type specifier.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment