mirror of
https://github.com/python/cpython.git
synced 2024-11-28 04:15:11 +08:00
Fix for SF bug 528132 (Armin Rigo): classmethod().__get__() segfault
The proper fix is not quite what was submitted; it's really better to take the class of the object passed rather than calling PyMethod_New with NULL pointer args, because that can then cause other core dumps later. I also added a testcase for the fix to classmethods() in test_descr.py. I've already applied this to the 2.2 branch.
This commit is contained in:
parent
c99475e7a0
commit
7e30548285
@ -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..."
|
||||
|
@ -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));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user