summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@nokia.com>2011-04-28 14:02:54 +0200
committercon <qtc-committer@nokia.com>2011-04-28 16:52:38 +0200
commit0b9b704584e68bb69df788649cef07d236f2838c (patch)
tree7f9367ed29355c72ea28dcd19d333dd1a339f5b3
parent98410507911325bf5fc73791e736467ebe1e49a8 (diff)
downloadqt-creator-0b9b704584e68bb69df788649cef07d236f2838c.tar.gz
QmlDesigner.rewriter: crash fix
When pasting or reading in a Component that has no object definition inside we crashed. I added an explicit check in the FirstDefinitionFinder. In the TextToModelMerger we then handle this case. Task-Nr: QTCREATORBUG-4730 Reviewed-by: Erik Verbruggen
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp5
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.h2
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp4
3 files changed, 9 insertions, 2 deletions
diff --git a/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp b/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp
index 2e5d887254..1edac108ad 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp
@@ -54,13 +54,16 @@ FirstDefinitionFinder::FirstDefinitionFinder(const QString &text):
\arg the offset of the object to search in
\return the offset of the first object definition
*/
-quint32 FirstDefinitionFinder::operator()(quint32 offset)
+qint32 FirstDefinitionFinder::operator()(quint32 offset)
{
m_offset = offset;
m_firstObjectDefinition = 0;
Node::accept(m_doc->qmlProgram(), this);
+ if (!m_firstObjectDefinition)
+ return -1;
+
return m_firstObjectDefinition->firstSourceLocation().offset;
}
diff --git a/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.h b/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.h
index 867ed1006b..aaf00c754c 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.h
@@ -43,7 +43,7 @@ class FirstDefinitionFinder: protected QmlJS::AST::Visitor
public:
FirstDefinitionFinder(const QString &text);
- quint32 operator()(quint32 offset);
+ qint32 operator()(quint32 offset);
protected:
using QmlJS::AST::Visitor::visit;
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index 6e3f387da5..b6b4e3b64f 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -1397,6 +1397,10 @@ void TextToModelMerger::setupComponent(const ModelNode &node)
if (componentText.contains("Component")) { //explicit component
FirstDefinitionFinder firstDefinitionFinder(componentText);
int offset = firstDefinitionFinder(0);
+ if (offset < 0) {
+ node.variantProperty("__component_data").setValue(QLatin1String(""));
+ return; //No object definition found
+ }
ObjectLengthCalculator objectLengthCalculator;
unsigned length;
if (objectLengthCalculator(componentText, offset, length)) {