summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_descr.py5
-rw-r--r--Objects/funcobject.c2
2 files changed, 7 insertions, 0 deletions
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 1188e1d..ce28cce 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -1208,6 +1208,11 @@ def classmethods():
vereq(d.goo(1), (D, 1))
vereq(d.foo(1), (d, 1))
vereq(D.foo(d, 1), (d, 1))
+ # Test for a specific crash (SF bug 528132)
+ def f(cls, arg): return (cls, arg)
+ ff = classmethod(f)
+ vereq(ff.__get__(0, int)(42), (int, 42))
+ vereq(ff.__get__(0)(42), (int, 42))
def staticmethods():
if verbose: print "Testing static methods..."
diff --git a/Objects/funcobject.c b/Objects/funcobject.c
index f24cbcf..426b8f4 100644
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -474,6 +474,8 @@ cm_descr_get(PyObject *self, PyObject *obj, PyObject *type)
"uninitialized classmethod object");
return NULL;
}
+ if (type == NULL)
+ type = (PyObject *)(obj->ob_type);
return PyMethod_New(cm->cm_callable,
type, (PyObject *)(type->ob_type));
}