From d9994e0115e1acfd6d3d97a048af9616778af95c Mon Sep 17 00:00:00 2001
From: Guido van Rossum <guido@python.org>
Date: Fri, 13 Apr 2001 15:42:40 +0000
Subject: [PATCH] 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.
---
 Python/ceval.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

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