From: Debian Qt/KDE Maintainers Date: Thu, 7 Nov 2024 08:47:17 +0000 (+0300) Subject: QML: fortify qmlExecuteDeferred some more X-Git-Tag: archive/raspbian/5.15.15+dfsg-3+rpi1^2~7 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=33464870f6208a9e6bca6a05acf6f99069d6dffc;p=qtdeclarative-opensource-src.git QML: fortify qmlExecuteDeferred some more Origin: upstream, https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=f69b6f0940b178b4 Last-Update: 2024-11-07 Gbp-Pq: Name fortify_qmlexecutedeferred.patch --- diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index 852a673eb..c9f1b117e 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -1588,17 +1588,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)