aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/qml/qqmlpropertycache.cpp2
-rw-r--r--tests/auto/qml/qqmlecmascript/data/overrideDataAssert.qml6
-rw-r--r--tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp11
3 files changed, 18 insertions, 1 deletions
diff --git a/src/qml/qml/qqmlpropertycache.cpp b/src/qml/qml/qqmlpropertycache.cpp
index 8167280142..b073d22e71 100644
--- a/src/qml/qml/qqmlpropertycache.cpp
+++ b/src/qml/qml/qqmlpropertycache.cpp
@@ -1201,7 +1201,7 @@ void QQmlPropertyCache::toMetaObjectBuilder(QMetaObjectBuilder &builder)
QQmlPropertyData *olddata = data;
data = This->overrideData(data);
- if (data) Insert::in(This, properties, methods, iter, data);
+ if (data && !data->isFunction()) Insert::in(This, properties, methods, iter, data);
} else {
if (data->coreIndex < This->propertyIndexCacheStart)
return;
diff --git a/tests/auto/qml/qqmlecmascript/data/overrideDataAssert.qml b/tests/auto/qml/qqmlecmascript/data/overrideDataAssert.qml
new file mode 100644
index 0000000000..e419bd3beb
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/overrideDataAssert.qml
@@ -0,0 +1,6 @@
+import QtQuick 2.0
+
+QtObject {
+ signal routeStatusChanged
+ function onRouteStatusChanged() { }
+}
diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
index 4dc041c91a..45005e68c1 100644
--- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
+++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
@@ -268,6 +268,7 @@ private slots:
void qqmldataDestroyed();
void secondAlias();
void varAlias();
+ void overrideDataAssert();
private:
static void propertyVarWeakRefCallback(v8::Persistent<v8::Value> object, void* parameter);
@@ -6961,6 +6962,16 @@ void tst_qqmlecmascript::varAlias()
delete object;
}
+// Used to trigger an assert in the lazy meta object creation stage
+void tst_qqmlecmascript::overrideDataAssert()
+{
+ QQmlComponent c(&engine, testFileUrl("overrideDataAssert.qml"));
+ QObject *object = c.create();
+ QVERIFY(object != 0);
+ object->metaObject();
+ delete object;
+}
+
QTEST_MAIN(tst_qqmlecmascript)
#include "tst_qqmlecmascript.moc"