diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2021-12-14 16:16:20 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-12-17 01:17:46 +0000 |
commit | 72521b24015d751aed127680640154dda58f3694 (patch) | |
tree | 31f8d0f67b728b3dc3280107e388abc68f951b38 /src/qml/jsruntime/qv4qobjectwrapper.cpp | |
parent | a461d16a707131487c825336121439cdc01ed923 (diff) |
Do not copy lookups
It leads to data corruption. Also, be more careful about releasing the
property cache. We can only do that if the qobjectlookup member of the
union is active. Unfortunately we have to do a number of checks now, to
make sure it is. In order to still keep the checks inline, we move some
functions around.
Fixes: QTBUG-99211
Change-Id: If6dd879e67b172e1a9035e83fbfacbe73c6c7476
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
(cherry picked from commit de587f1c55ce27ed332e0810eb8768b287212bcf)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/qml/jsruntime/qv4qobjectwrapper.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4qobjectwrapper.cpp | 19 |
1 files changed, 1 insertions, 18 deletions
diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index 0ce9da1e85..9e30225d3c 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -963,33 +963,16 @@ ReturnedValue QObjectWrapper::virtualResolveLookupGetter(const Object *object, E } QV4::setupQObjectLookup(lookup, ddata, property, This); - lookup->getter = QV4::QObjectWrapper::lookupGetter; + lookup->getter = QV4::Lookup::getterQObject; return lookup->getter(lookup, engine, *object); } -ReturnedValue QObjectWrapper::lookupGetter(Lookup *lookup, ExecutionEngine *engine, const Value &object) -{ - const auto revertLookup = [lookup, engine, &object]() { - lookup->qobjectLookup.propertyCache->release(); - lookup->qobjectLookup.propertyCache = nullptr; - lookup->getter = Lookup::getterGeneric; - return Lookup::getterGeneric(lookup, engine, object); - }; - - return lookupGetterImpl(lookup, engine, object, /*useOriginalProperty*/ false, revertLookup); -} - ReturnedValue QObjectWrapper::lookupAttached( Lookup *l, ExecutionEngine *engine, const Value &object) { return QV4::Lookup::getterGeneric(l, engine, object); } -bool QObjectWrapper::lookupSetter(Lookup *l, ExecutionEngine *engine, Value &object, const Value &v) -{ - return QV4::Lookup::setterFallback(l, engine, object, v); -} - bool QObjectWrapper::virtualResolveLookupSetter(Object *object, ExecutionEngine *engine, Lookup *lookup, const Value &value) { |