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.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 363c562..46fc2c6 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -2908,7 +2908,8 @@
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 @@
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;