aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-09-20 10:11:54 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-20 14:27:21 +0200
commit8c3f133bc34e2c72d4decc0c9af59965d964bbed (patch)
tree1639d62d641bd40936acac94e872aa5db4ce34af
parent0615bced19d6cdeb30c0929c7d0988b0b5785850 (diff)
[new compiler] Correctly handle attempts to set invalid group properties
Don't crash, bail out with an error message (expected by tst_qqmllanguage) Change-Id: I357281d009d92c4b0248ba648c88e20334aabb5b Reviewed-by: Lars Knoll <lars.knoll@digia.com>
-rw-r--r--src/qml/qml/qqmlobjectcreator.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp
index bb9e264b9b..9c24fb69ea 100644
--- a/src/qml/qml/qqmlobjectcreator.cpp
+++ b/src/qml/qml/qqmlobjectcreator.cpp
@@ -518,12 +518,12 @@ QObject *QmlObjectCreator::create(int subComponentIndex, QObject *parent)
context->setIdPropertyData(mapping);
QObject *instance = createInstance(objectToCreate, parent);
-
- QQmlData *ddata = QQmlData::get(instance);
- Q_ASSERT(ddata);
- ddata->compiledData = compiledData;
- ddata->compiledData->addref();
-
+ if (instance) {
+ QQmlData *ddata = QQmlData::get(instance);
+ Q_ASSERT(ddata);
+ ddata->compiledData = compiledData;
+ ddata->compiledData->addref();
+ }
return instance;
}
@@ -991,6 +991,10 @@ bool QmlObjectCreator::setPropertyValue(QQmlPropertyData *property, int bindingI
const QV4::CompiledData::Object *obj = qmlUnit->objectAt(binding->value.objectIndex);
if (stringAt(obj->inheritedTypeNameIndex).isEmpty()) {
QQmlValueType *valueType = QQmlValueTypeFactory::valueType(property->propType);
+ if (!valueType) {
+ recordError(binding->location, tr("Cannot set properties on %1 as it is null").arg(stringAt(binding->propertyNameIndex)));
+ return false;
+ }
valueType->read(_qobject, property->coreIndex);