diff options
| -rw-r--r-- | sources/pyside6/libpyside/pyside.cpp | 2 | ||||
| -rw-r--r-- | sources/shiboken6/libshiboken/basewrapper.cpp | 8 | ||||
| -rw-r--r-- | sources/shiboken6/libshiboken/basewrapper.h | 3 | ||||
| -rw-r--r-- | sources/shiboken6/libshiboken/sbkfeature_base.cpp | 2 |
4 files changed, 15 insertions, 0 deletions
diff --git a/sources/pyside6/libpyside/pyside.cpp b/sources/pyside6/libpyside/pyside.cpp index 6d98b63d7..572341e85 100644 --- a/sources/pyside6/libpyside/pyside.cpp +++ b/sources/pyside6/libpyside/pyside.cpp @@ -203,6 +203,8 @@ static QByteArrayList _SbkType_LookupProperty(PyTypeObject *type, auto len = std::strlen(origName); for (Py_ssize_t idx = 0; idx < n; idx++) { PyTypeObject *base = reinterpret_cast<PyTypeObject *>(PyTuple_GET_ITEM(mro, idx)); + if (!SbkObjectType_Check(base)) + continue; auto props = SbkObjectType_GetPropertyStrings(base); if (props == nullptr || *props == nullptr) continue; diff --git a/sources/shiboken6/libshiboken/basewrapper.cpp b/sources/shiboken6/libshiboken/basewrapper.cpp index 8bd5b7d37..d33f06431 100644 --- a/sources/shiboken6/libshiboken/basewrapper.cpp +++ b/sources/shiboken6/libshiboken/basewrapper.cpp @@ -652,6 +652,14 @@ PyObject *FallbackRichCompare(PyObject *self, PyObject *other, int op) return res; } +bool SbkObjectType_Check(PyTypeObject *type) +{ + static auto *obMeta = reinterpret_cast<PyObject *>(SbkObjectType_TypeF()); + auto *obType = reinterpret_cast<PyObject *>(type); + return obMeta == reinterpret_cast<PyObject *>(Py_TYPE(obType)) + || PyObject_IsInstance(obType, obMeta); +} + } //extern "C" diff --git a/sources/shiboken6/libshiboken/basewrapper.h b/sources/shiboken6/libshiboken/basewrapper.h index 0930830c5..90ec8cb4e 100644 --- a/sources/shiboken6/libshiboken/basewrapper.h +++ b/sources/shiboken6/libshiboken/basewrapper.h @@ -110,6 +110,9 @@ LIBSHIBOKEN_API PyObject *FallbackRichCompare(PyObject *self, PyObject *other, i /// PYSIDE-1970: Be easily able to see what is happening in the running code. LIBSHIBOKEN_API void disassembleFrame(const char *marker); +/// PYSIDE-2230: Check if an object is an SbkObject. +LIBSHIBOKEN_API bool SbkObjectType_Check(PyTypeObject *type); + } // extern "C" namespace Shiboken diff --git a/sources/shiboken6/libshiboken/sbkfeature_base.cpp b/sources/shiboken6/libshiboken/sbkfeature_base.cpp index 01b2c0657..acf527e49 100644 --- a/sources/shiboken6/libshiboken/sbkfeature_base.cpp +++ b/sources/shiboken6/libshiboken/sbkfeature_base.cpp @@ -207,6 +207,8 @@ static PyObject *lookupUnqualifiedOrOldEnum(PyTypeObject *type, PyObject *name) for (idx = 0; idx < n; ++idx) { auto *base = PyTuple_GET_ITEM(mro, idx); auto *type_base = reinterpret_cast<PyTypeObject *>(base); + if (!SbkObjectType_Check(type_base)) + continue; auto sotp = PepType_SOTP(type_base); // The EnumFlagInfo structure tells us if there are Enums at all. const char **enumFlagInfo = sotp->enumFlagInfo; |
