Commits

Anonymous committed 35139a9

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.

  • Participants
  • Parent commits 96bd4a8
  • Branches legacy-trunk

Comments (0)

Files changed (1)

File Python/ceval.c

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