Description: QML: fortify qmlExecuteDeferred some more
Origin: upstream, https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=f69b6f0940b178b4
Last-Update: 2024-11-07

--- a/src/qml/qml/qqmlengine.cpp
+++ b/src/qml/qml/qqmlengine.cpp
@@ -1583,17 +1583,23 @@ void qmlExecuteDeferred(QObject *object)
 {
     QQmlData *data = QQmlData::get(object);
 
-    if (data && !data->deferredData.isEmpty() && !data->wasDeleted(object)) {
-        QQmlEnginePrivate *ep = QQmlEnginePrivate::get(data->context->engine);
+    if (!data
+            || !data->context
+            || !data->context->engine
+            || data->deferredData.isEmpty()
+            || data->wasDeleted(object)) {
+        return;
+    }
 
-        QQmlComponentPrivate::DeferredState state;
-        QQmlComponentPrivate::beginDeferred(ep, object, &state);
+    QQmlEnginePrivate *ep = QQmlEnginePrivate::get(data->context->engine);
 
-        // Release the reference for the deferral action (we still have one from construction)
-        data->releaseDeferredData();
+    QQmlComponentPrivate::DeferredState state;
+    QQmlComponentPrivate::beginDeferred(ep, object, &state);
 
-        QQmlComponentPrivate::completeDeferred(ep, &state);
-    }
+    // Release the reference for the deferral action (we still have one from construction)
+    data->releaseDeferredData();
+
+    QQmlComponentPrivate::completeDeferred(ep, &state);
 }
 
 QQmlContext *qmlContext(const QObject *obj)
