Don't crash when accessing invalid properties through QObjectWrapper

Change-Id: I613bf5dc685bb4235262b429d8f7318ea144fb9d
Fixes: QTBUG-75203
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
This commit is contained in:
Ulf Hermann 2019-04-17 12:35:42 +02:00
parent a1b429011d
commit ea74f0c68c
3 changed files with 31 additions and 1 deletions

View File

@ -856,7 +856,7 @@ ReturnedValue QObjectWrapper::virtualResolveLookupGetter(const Object *object, E
if (!ddata || !ddata->propertyCache) {
QQmlPropertyData local;
QQmlPropertyData *property = QQmlPropertyCache::property(engine->jsEngine(), qobj, name, qmlContext, local);
return getProperty(engine, qobj, property);
return property ? getProperty(engine, qobj, property) : QV4::Encode::undefined();
}
QQmlPropertyData *property = ddata->propertyCache->property(name.getPointer(), qobj, qmlContext);

View File

@ -0,0 +1,20 @@
import QtQuick 2.12
QtObject {
property list<QtObject> entries: [
QtObject {
readonly property color color: "green"
},
QtObject {
}
]
property Row row: Row {
Repeater {
model: entries
Rectangle {
color: model.color ? model.color : "red"
}
}
}
}

View File

@ -367,6 +367,7 @@ private slots:
void deleteSparseInIteration();
void saveAccumulatorBeforeToInt32();
void intMinDividedByMinusOne();
void undefinedPropertiesInObjectWrapper();
private:
// static void propertyVarWeakRefCallback(v8::Persistent<v8::Value> object, void* parameter);
@ -8958,6 +8959,15 @@ void tst_qqmlecmascript::intMinDividedByMinusOne()
QCOMPARE(object->property("doesNotFitInInt").toUInt(), 2147483648u);
}
void tst_qqmlecmascript::undefinedPropertiesInObjectWrapper()
{
QQmlEngine engine;
QQmlComponent component(&engine, testFile("undefinedPropertiesInObjectWrapper.qml"));
QVERIFY(component.isReady());
QScopedPointer<QObject> object(component.create());
QVERIFY(!object.isNull());
}
QTEST_MAIN(tst_qqmlecmascript)
#include "tst_qqmlecmascript.moc"