From 3d2c365093d44918a60b9e244f36de077c0e61f1 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 2 Mar 2024 15:49:55 +0100 Subject: [PATCH] Gui: PythonWrapper: Fix possible crash in qt_wrapInstance --- src/Gui/PythonWrapper.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Gui/PythonWrapper.cpp b/src/Gui/PythonWrapper.cpp index 56f18d2b87..dc4d3df9bb 100644 --- a/src/Gui/PythonWrapper.cpp +++ b/src/Gui/PythonWrapper.cpp @@ -485,12 +485,22 @@ Py::Object qt_wrapInstance(qttype object, { Py::Module mainmod(importShiboken(), true); Py::Callable func = mainmod.getDict().getItem("wrapInstance"); + if (func.isNull()) { + // Failure will be handled in the calling instance + return func; + } + + Py::Module qtmod(importPySide(moduleName)); + Py::Object item = qtmod.getDict().getItem(className); + if (item.isNull()) { + // Failure will be handled in the calling instance + return item; + } Py::Tuple arguments(2); arguments[0] = Py::asObject(PyLong_FromVoidPtr((void*)object)); + arguments[1] = item; - Py::Module qtmod(importPySide(moduleName)); - arguments[1] = qtmod.getDict().getItem(className); return func.apply(arguments); } @@ -845,7 +855,9 @@ void PythonWrapper::createChildrenNameAttributes(PyObject* root, QObject* object } Py::Object pyChild(qt_wrapInstance(child, className, "QtWidgets")); - PyObject_SetAttrString(root, name.constData(), pyChild.ptr()); + if (!pyChild.isNull()) { + PyObject_SetAttrString(root, name.constData(), pyChild.ptr()); + } #endif } createChildrenNameAttributes(root, child);