Skip to content

Commit a43cfb7

Browse files
author
mark.dickinson
committed
Merged revisions 74709 via svnmerge from
svn+ssh://pythondev@www.python.org/python/branches/py3k ................ r74709 | mark.dickinson | 2009-09-07 19:08:12 +0100 (Mon, 07 Sep 2009) | 9 lines Merged revisions 74708 via svnmerge from svn+ssh://[email protected]/python/trunk ........ r74708 | mark.dickinson | 2009-09-07 19:04:58 +0100 (Mon, 07 Sep 2009) | 2 lines #Issue 6795: Fix infinite recursion in long(Decimal('nan')); change int(Decimal('nan')) to raise ValueError instead of either returning NaN or raising InvalidContext. ........ ................ git-svn-id: http://svn.python.org/projects/python/branches/release31-maint@74720 6015fed2-1504-0410-9fe1-9d1591cc4771
1 parent 54dee99 commit a43cfb7

3 files changed

Lines changed: 11 additions & 3 deletions

File tree

Lib/decimal.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1553,10 +1553,9 @@ def __int__(self):
15531553
"""Converts self to an int, truncating if necessary."""
15541554
if self._is_special:
15551555
if self._isnan():
1556-
context = getcontext()
1557-
return context._raise_error(InvalidContext)
1556+
raise ValueError("Cannot convert NaN to integer")
15581557
elif self._isinfinity():
1559-
raise OverflowError("Cannot convert infinity to int")
1558+
raise OverflowError("Cannot convert infinity to integer")
15601559
s = (-1)**self._sign
15611560
if self._exp >= 0:
15621561
return s*int(self._int)*10**self._exp

Lib/test/test_decimal.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1543,6 +1543,11 @@ def test_int(self):
15431543
r = d.to_integral(ROUND_DOWN)
15441544
self.assertEqual(Decimal(int(d)), r)
15451545

1546+
self.assertRaises(ValueError, int, Decimal('-nan'))
1547+
self.assertRaises(ValueError, int, Decimal('snan'))
1548+
self.assertRaises(OverflowError, int, Decimal('inf'))
1549+
self.assertRaises(OverflowError, int, Decimal('-inf'))
1550+
15461551
def test_trunc(self):
15471552
for x in range(-250, 250):
15481553
s = '%0.2f' % (x / 100.0)

Misc/NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ C-API
5252
Library
5353
-------
5454

55+
- Issue #6795: int(Decimal('nan')) now raises ValueError instead of
56+
returning NaN or raising InvalidContext. Also, fix infinite recursion
57+
in long(Decimal('nan')).
58+
5559
- Issue #6850: Fix bug in Decimal._parse_format_specifier for formats
5660
with no type specifier.
5761

0 commit comments

Comments
 (0)