[Python-checkins] CVS: python/dist/src/Python ceval.c,2.236,2.237

Guido van Rossum gvanrossum@users.sourceforge.net
2001年4月13日 08:42:42 -0700


Update of /cvsroot/python/python/dist/src/Python
In directory usw-pr-cvs1:/tmp/cvs-serv21661
Modified Files:
	ceval.c 
Log Message:
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.
Index: ceval.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v
retrieving revision 2.236
retrieving revision 2.237
diff -C2 -r2.236 -r2.237
*** ceval.c	2001年04月11日 13:52:29	2.236
--- ceval.c	2001年04月13日 15:42:40	2.237
***************
*** 2884,2893 ****
 		}
 		if (!ok) {
! 			PyObject* fn = ((PyFunctionObject*) func)->func_name;
 			PyErr_Format(PyExc_TypeError,
 				 "unbound method %s%smust be "
 				 "called with instance as first argument",
! 				 fn ? PyString_AsString(fn) : "",
! 				 fn ? "() " : "");
 			return NULL;
 		}
--- 2884,2892 ----
 		}
 		if (!ok) {
! 			char* fn = get_func_name(func);
 			PyErr_Format(PyExc_TypeError,
 				 "unbound method %s%smust be "
 				 "called with instance as first argument",
! 				 fn ? fn : "", fn ? "() " : "");
 			return NULL;
 		}

AltStyle によって変換されたページ (->オリジナル) /