Fix and test for an infinite C recursion.
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index 26bfe87..ca7a8f3 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -649,6 +649,10 @@
def __hash__(self):
return 2**100
self.assertEquals(type(hash(Y())), int)
+ class Z(long):
+ def __hash__(self):
+ return self
+ self.assertEquals(hash(Z(42)), hash(42L))
def test_hex(self):
self.assertEqual(hex(16), '0x10')
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 652009b..485d2bb 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -4560,7 +4560,7 @@
if (res == NULL)
return -1;
if (PyLong_Check(res))
- h = res->ob_type->tp_hash(res);
+ h = PyLong_Type.tp_hash(res);
else
h = PyInt_AsLong(res);
Py_DECREF(res);