diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-09-20 10:11:54 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-20 14:27:21 +0200 |
commit | 8c3f133bc34e2c72d4decc0c9af59965d964bbed (patch) | |
tree | 1639d62d641bd40936acac94e872aa5db4ce34af | |
parent | 0615bced19d6cdeb30c0929c7d0988b0b5785850 (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.cpp | 16 |
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); |