From: Guido van Rossum Date: Fri, 13 Apr 2001 15:42:40 +0000 (+0000) Subject: Patch by Ping (SF bug 415879, Exception.__init__() causes segfault): X-Git-Tag: v2.1c1~17 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d9994e0115e1acfd6d3d97a048af9616778af95c;p=python 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. --- diff --git a/Python/ceval.c b/Python/ceval.c index 10b5c5d32c..a1b3bc2865 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -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);