Fix for rather inaccurately titled bug

[ 1165306 ] Property access with decorator makes interpreter crash

Don't allow the creation of unbound methods with NULL im_class, because
attempting to call such crashes.

Backport candidate.
This commit is contained in:
Michael W. Hudson 2005-03-30 16:32:10 +00:00
parent 5c473559e5
commit e2749cb264
2 changed files with 16 additions and 0 deletions

View file

@ -47,6 +47,16 @@ im()
verify(c.get_yolks() == 1 and c.get_more_yolks() == 4,
'Broken call of hand-crafted instance method')
im = new.instancemethod(break_yolks, c)
im()
verify(c.get_yolks() == -1)
try:
new.instancemethod(break_yolks, None)
except TypeError:
pass
else:
raise TestFailed, "dangerous instance method creation allowed"
# It's unclear what the semantics should be for a code object compiled at
# module scope, but bound and run in a function. In CPython, `c' is global
# (by accident?) while in Jython, `c' is local. The intent of the test

View file

@ -2208,6 +2208,12 @@ instancemethod_new(PyTypeObject* type, PyObject* args, PyObject *kw)
}
if (self == Py_None)
self = NULL;
if (self == NULL && classObj == NULL) {
PyErr_SetString(PyExc_TypeError,
"unbound methods must have non-NULL im_class");
return NULL;
}
return PyMethod_New(func, self, classObj);
}