1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
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)
|