Bug #1163325:  "special" decimals aren't hashable
diff --git a/Lib/decimal.py b/Lib/decimal.py
index 7f71b83..fb11e8f 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -728,6 +728,10 @@
         # Decimal integers must hash the same as the ints
         # Non-integer decimals are normalized and hashed as strings
         # Normalization assures that hast(100E-1) == hash(10)
+        if self._is_special:
+            if self._isnan():
+                raise TypeError('Cannot hash a NaN value.')
+            return hash(str(self))
         i = int(self)
         if self == Decimal(i):
             return hash(i)
diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py
index f523a72..fc1e048 100644
--- a/Lib/test/test_decimal.py
+++ b/Lib/test/test_decimal.py
@@ -811,6 +811,9 @@
         hash(Decimal(23))
         #the same hash that to an int
         self.assertEqual(hash(Decimal(23)), hash(23))
+        self.assertRaises(TypeError, hash, Decimal('NaN'))
+        self.assert_(hash(Decimal('Inf')))
+        self.assert_(hash(Decimal('-Inf')))
 
     def test_min_and_max_methods(self):
 
diff --git a/Misc/NEWS b/Misc/NEWS
index 19ce8f4..c91fb17 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -86,6 +86,9 @@
 Library
 -------
 
+- Bug #1163325:  Decimal infinities failed to hash.  Attempting to
+  hash a NaN raised an InvalidOperation instead of a TypeError.
+
 - Patch #918101: Add tarfile open mode r|* for auto-detection of the 
   stream compression; add, for symmetry reasons, r:* as a synonym of r.