From fd2e00f6e6098b69ae9af108e2ddcf5fbef60cf5 Mon Sep 17 00:00:00 2001
From: Marco Bubke <marco.bubke@digia.com>
Date: Mon, 6 Jan 2014 14:08:44 +0100
Subject: [PATCH] QmlDesigner: Fix crash in anchor update function

Task-number: QTCREATORBUG-11138
Change-Id: Ie7eeb1cf93d96f377f53cb69587285c8da7988a7
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
---
 .../anchorindicatorgraphicsitem.cpp           | 28 ++++++++++---------
 1 file changed, 15 insertions(+), 13 deletions(-)

diff --git a/src/plugins/qmldesigner/components/formeditor/anchorindicatorgraphicsitem.cpp b/src/plugins/qmldesigner/components/formeditor/anchorindicatorgraphicsitem.cpp
index 5f61d1a81ec..aa7e1d53105 100644
--- a/src/plugins/qmldesigner/components/formeditor/anchorindicatorgraphicsitem.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/anchorindicatorgraphicsitem.cpp
@@ -211,24 +211,26 @@ static void updateAnchorLinePoints(QPointF *firstPoint, QPointF *secondPoint, co
 
 void AnchorIndicatorGraphicsItem::updateAnchorIndicator(const AnchorLine &sourceAnchorLine, const AnchorLine targetAnchorLine)
 {
-    m_sourceAnchorLineType = sourceAnchorLine.type();
-    m_targetAnchorLineType = targetAnchorLine.type();
+    if (sourceAnchorLine.qmlItemNode().isValid() && targetAnchorLine.qmlItemNode().isValid()) {
+        m_sourceAnchorLineType = sourceAnchorLine.type();
+        m_targetAnchorLineType = targetAnchorLine.type();
 
-    m_startPoint = createAnchorPoint(sourceAnchorLine.qmlItemNode(), sourceAnchorLine.type());
+        m_startPoint = createAnchorPoint(sourceAnchorLine.qmlItemNode(), sourceAnchorLine.type());
 
-    if (targetAnchorLine.qmlItemNode() == sourceAnchorLine.qmlItemNode().instanceParentItem())
-        m_endPoint = createParentAnchorPoint(targetAnchorLine.qmlItemNode(), targetAnchorLine.type(), sourceAnchorLine.qmlItemNode());
-    else
-        m_endPoint = createAnchorPoint(targetAnchorLine.qmlItemNode(), targetAnchorLine.type());
+        if (targetAnchorLine.qmlItemNode() == sourceAnchorLine.qmlItemNode().instanceParentItem())
+            m_endPoint = createParentAnchorPoint(targetAnchorLine.qmlItemNode(), targetAnchorLine.type(), sourceAnchorLine.qmlItemNode());
+        else
+            m_endPoint = createAnchorPoint(targetAnchorLine.qmlItemNode(), targetAnchorLine.type());
 
-    m_firstControlPoint = createControlPoint(m_startPoint, sourceAnchorLine.type(), m_endPoint);
-    m_secondControlPoint = createControlPoint(m_endPoint, targetAnchorLine.type(), m_startPoint);
+        m_firstControlPoint = createControlPoint(m_startPoint, sourceAnchorLine.type(), m_endPoint);
+        m_secondControlPoint = createControlPoint(m_endPoint, targetAnchorLine.type(), m_startPoint);
 
-    updateAnchorLinePoints(&m_sourceAnchorLineFirstPoint, &m_sourceAnchorLineSecondPoint, sourceAnchorLine);
-    updateAnchorLinePoints(&m_targetAnchorLineFirstPoint, &m_targetAnchorLineSecondPoint, targetAnchorLine);
+        updateAnchorLinePoints(&m_sourceAnchorLineFirstPoint, &m_sourceAnchorLineSecondPoint, sourceAnchorLine);
+        updateAnchorLinePoints(&m_targetAnchorLineFirstPoint, &m_targetAnchorLineSecondPoint, targetAnchorLine);
 
-    updateBoundingRect();
-    update();
+        updateBoundingRect();
+        update();
+    }
 }
 
 void AnchorIndicatorGraphicsItem::updateBoundingRect()
-- 
GitLab