]> granicus.if.org Git - python/commitdiff
#Issue 6795: Fix infinite recursion in long(Decimal('nan')); change int(Decimal...
authorMark Dickinson <dickinsm@gmail.com>
Mon, 7 Sep 2009 18:04:58 +0000 (18:04 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Mon, 7 Sep 2009 18:04:58 +0000 (18:04 +0000)
Lib/decimal.py
Lib/test/test_decimal.py
Misc/NEWS

index 1f5c920d795ea9ba1749653b13f6300cf4a312f9..a87a4a541101345d687ea334c0bd7e4ecf0c634f 100644 (file)
@@ -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
index f7f023d22d0455ab5847d563098021d584380834..50a855e9d1df622b45cde5baa37a5bdd23af22d9 100644 (file)
@@ -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)
index fe281cf0149a3d1eef22b5e246a2b28378c46d23..daea539f8c65a0052183729ae1de80e69746ad0e 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.