From a30c016189865656947107f6cc4d9a69c2568a95 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Thu, 14 Oct 2010 15:14:35 +0200 Subject: [PATCH] QmlJS: Fix several crashes when UiQualifiedId::name is 0. Task-number: QTCREATORBUG-2737 Reviewed-by: Kai Koehne --- src/libs/qmljs/qmljsbind.cpp | 2 +- src/libs/qmljs/qmljsrewriter.cpp | 3 ++- src/libs/qmljs/qmljsscopebuilder.cpp | 4 +++- src/plugins/qmljseditor/qmljsfindreferences.cpp | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp index 1cdf8e2b5e0..bc56065463b 100644 --- a/src/libs/qmljs/qmljsbind.cpp +++ b/src/libs/qmljs/qmljsbind.cpp @@ -241,7 +241,7 @@ bool Bind::visit(UiObjectDefinition *ast) // think anchors { ... } bool isGroupedBinding = false; for (UiQualifiedId *it = ast->qualifiedTypeNameId; it; it = it->next) { - if (!it->next) + if (!it->next && it->name) isGroupedBinding = it->name->asString().at(0).isLower(); } diff --git a/src/libs/qmljs/qmljsrewriter.cpp b/src/libs/qmljs/qmljsrewriter.cpp index 17293b34f6e..aad4b650abf 100644 --- a/src/libs/qmljs/qmljsrewriter.cpp +++ b/src/libs/qmljs/qmljsrewriter.cpp @@ -256,7 +256,8 @@ QString Rewriter::flatten(UiQualifiedId *first) if (current != first) flatId += '.'; - flatId += current->name->asString(); + if (current->name) + flatId += current->name->asString(); } return flatId; diff --git a/src/libs/qmljs/qmljsscopebuilder.cpp b/src/libs/qmljs/qmljsscopebuilder.cpp index 2fbdc0403c6..e1b42833300 100644 --- a/src/libs/qmljs/qmljsscopebuilder.cpp +++ b/src/libs/qmljs/qmljsscopebuilder.cpp @@ -228,7 +228,7 @@ void ScopeBuilder::setQmlScopeObject(Node *node) if (initializer) { for (UiObjectMemberList *m = initializer->members; m; m = m->next) { if (UiScriptBinding *scriptBinding = cast<UiScriptBinding *>(m->member)) { - if (scriptBinding->qualifiedId + if (scriptBinding->qualifiedId && scriptBinding->qualifiedId->name && scriptBinding->qualifiedId->name->asString() == QLatin1String("target") && ! scriptBinding->qualifiedId->next) { // ### make Evaluate understand statements. @@ -256,6 +256,8 @@ const Value *ScopeBuilder::scopeObjectLookup(AST::UiQualifiedId *id) foreach (const ObjectValue *scopeObject, _context->scopeChain().qmlScopeObjects) { const ObjectValue *object = scopeObject; for (UiQualifiedId *it = id; it; it = it->next) { + if (!it->name) + return 0; result = object->property(it->name->asString(), _context); if (!result) break; diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp index d3f9de96a00..ff7f106c7b0 100644 --- a/src/plugins/qmljseditor/qmljsfindreferences.cpp +++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp @@ -468,7 +468,7 @@ private: bool checkBindingName(UiQualifiedId *id) { - if (id && !id->next && containsOffset(id->identifierToken)) { + if (id && id->name && !id->next && containsOffset(id->identifierToken)) { _result.second = id->name->asString(); return true; } -- GitLab