From 5105aefa7bcf8928ac901c558f3d470adddffb6c Mon Sep 17 00:00:00 2001 From: Itamar Ostricher Date: Wed, 3 Nov 2021 10:06:36 -0700 Subject: [PATCH 1/2] bpo-45967: Use PyObject_TypeCheck in type_call and binary_op1 --- Objects/abstract.c | 2 +- Objects/typeobject.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Objects/abstract.c b/Objects/abstract.c index 6227ad5a18bb95..15db0f8248b67a 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -881,7 +881,7 @@ binary_op1(PyObject *v, PyObject *w, const int op_slot if (slotv) { PyObject *x; - if (slotw && PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v))) { + if (slotw && PyObject_TypeCheck(w, Py_TYPE(v))) { x = slotw(v, w); if (x != Py_NotImplemented) return x; diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 18bea476ea9f25..51ec93d875271a 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1121,7 +1121,7 @@ type_call(PyTypeObject *type, PyObject *args, PyObject *kwds) /* If the returned object is not an instance of type, it won't be initialized. */ - if (!PyType_IsSubtype(Py_TYPE(obj), type)) + if (!PyObject_TypeCheck(obj, type)) return obj; type = Py_TYPE(obj); From 2362bf67e8acee49c6f97ea754d59dfd8982e07c Mon Sep 17 00:00:00 2001 From: Itamar Ostricher Date: Wed, 3 Nov 2021 14:09:51 -0700 Subject: [PATCH 2/2] Revert change in binary_op1 --- Objects/abstract.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Objects/abstract.c b/Objects/abstract.c index 15db0f8248b67a..6227ad5a18bb95 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -881,7 +881,7 @@ binary_op1(PyObject *v, PyObject *w, const int op_slot if (slotv) { PyObject *x; - if (slotw && PyObject_TypeCheck(w, Py_TYPE(v))) { + if (slotw && PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v))) { x = slotw(v, w); if (x != Py_NotImplemented) return x;