Patch by Ping (SF bug 415879, Exception.__init__() causes segfault):
Calling an unbound method on a C extension class without providing an instance can yield a segfault. Try "Exception.__init__()" or "ValueError.__init__()". This is a simple fix. The error-reporting bits in call_method mistakenly treat the misleadingly-named variable "func" as a function, when in fact it is a method. If we let get_func_name take care of the work, all is fine.
This commit is contained in:
parent
d03f8fe95e
commit
d9994e0115
|
@ -2883,12 +2883,11 @@ call_method(PyObject *func, PyObject *arg, PyObject *kw)
|
|||
return NULL;
|
||||
}
|
||||
if (!ok) {
|
||||
PyObject* fn = ((PyFunctionObject*) func)->func_name;
|
||||
char* fn = get_func_name(func);
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
"unbound method %s%smust be "
|
||||
"called with instance as first argument",
|
||||
fn ? PyString_AsString(fn) : "",
|
||||
fn ? "() " : "");
|
||||
fn ? fn : "", fn ? "() " : "");
|
||||
return NULL;
|
||||
}
|
||||
Py_INCREF(arg);
|
||||
|
|
Loading…
Reference in New Issue