diff options
author | Thomas Hartmann <Thomas.Hartmann@digia.com> | 2014-06-12 17:42:09 +0200 |
---|---|---|
committer | Thomas Hartmann <Thomas.Hartmann@digia.com> | 2014-06-12 17:49:34 +0200 |
commit | 4df72c08791dc2587f596c45fb1213f7c0277e80 (patch) | |
tree | 9c1d9d4ca92810671a0a6f59cf1e1bd8f367a092 /src/plugins/qmldesigner/designercore/model/bindingproperty.cpp | |
parent | dc3b8269557a58540268b0056ff9901360d27d7a (diff) | |
download | qt-creator-4df72c08791dc2587f596c45fb1213f7c0277e80.tar.gz |
QmlDesigner.Model: Crash fix
We have to check if the currentNode is actually valid.
Change-Id: I7a36758e96cbb4ae2a17755fc841ee2518a01ca2
Reviewed-by: Marco Bubke <marco.bubke@digia.com>
Diffstat (limited to 'src/plugins/qmldesigner/designercore/model/bindingproperty.cpp')
-rw-r--r-- | src/plugins/qmldesigner/designercore/model/bindingproperty.cpp | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp index 1b2ada05d8..c0744b4a45 100644 --- a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp +++ b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp @@ -95,34 +95,38 @@ QString BindingProperty::expression() const static ModelNode resolveBinding(const QString &binding, ModelNode currentNode, AbstractView* view) { - int i = 0; + int index = 0; QString element = binding.split(QLatin1Char('.')).at(0); while (!element.isEmpty()) { - if (element == "parent") { - if (currentNode.hasParentProperty()) - currentNode = currentNode.parentProperty().toNodeAbstractProperty().parentModelNode(); - else - return ModelNode(); //binding not valid - } else if (currentNode.hasProperty(element.toUtf8())) { - if (currentNode.property(element.toUtf8()).isNodeProperty()) - currentNode = currentNode.nodeProperty(element.toUtf8()).modelNode(); - else if (view->hasId(element)) + if (currentNode.isValid()) { + if (element == "parent") { + if (currentNode.hasParentProperty()) + currentNode = currentNode.parentProperty().toNodeAbstractProperty().parentModelNode(); + else + return ModelNode(); //binding not valid + } else if (currentNode.hasProperty(element.toUtf8())) { + if (currentNode.property(element.toUtf8()).isNodeProperty()) + currentNode = currentNode.nodeProperty(element.toUtf8()).modelNode(); + else if (view->hasId(element)) + currentNode = view->modelNodeForId(element); //id + else + return ModelNode(); //binding not valid + + } else { currentNode = view->modelNodeForId(element); //id + } + index++; + if (index < binding.split(QLatin1Char('.')).count()) + element = binding.split(QLatin1Char('.')).at(index); else - return ModelNode(); //binding not valid + element.clear(); } else { - currentNode = view->modelNodeForId(element); //id + return ModelNode(); } - i++; - if (i < binding.split(QLatin1Char('.')).count()) - element = binding.split(QLatin1Char('.')).at(i); - else - element.clear(); } return currentNode; - } ModelNode BindingProperty::resolveToModelNode() const |