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.
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);