slot_sq_item(): ensure that self is an instance of the wrapper's

d_type before calling the wrapped function.

fixup_slot_dispatchers(): fix indentation.
This commit is contained in:
Guido van Rossum 2001-10-17 07:15:43 +00:00
parent bcbdc95e90
commit caf59043d1
1 changed files with 5 additions and 3 deletions

View File

@ -2908,7 +2908,8 @@ slot_sq_item(PyObject *self, int i)
if (func->ob_type == &PyWrapperDescr_Type) {
PyWrapperDescrObject *wrapper =
(PyWrapperDescrObject *)func;
if (wrapper->d_base->wrapper == wrap_sq_item) {
if (wrapper->d_base->wrapper == wrap_sq_item &&
PyType_IsSubtype(self->ob_type, wrapper->d_type)) {
intargfunc f;
f = (intargfunc)(wrapper->d_wrapped);
return f(self, i);
@ -3938,9 +3939,10 @@ fixup_slot_dispatchers(PyTypeObject *type)
if (descr->ob_type == &PyWrapperDescr_Type) {
d = (PyWrapperDescrObject *)descr;
if (d->d_base->wrapper == p->wrapper &&
PyType_IsSubtype(type, d->d_type)) {
PyType_IsSubtype(type, d->d_type))
{
if (specific == NULL ||
specific == d->d_wrapped)
specific == d->d_wrapped)
specific = d->d_wrapped;
else
use_generic = 1;