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:
parent
a1b429011d
commit
ea74f0c68c
|
@ -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);
|
||||
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue