From 3d6e5fff0cad093608d2f68e6c20f30981689996 Mon Sep 17 00:00:00 2001
From: Jochen Becher <jochen_becher@gmx.de>
Date: Sat, 30 Apr 2016 17:05:22 +0200
Subject: [PATCH] ModelEditor: Avoid crash if an illegal relation is placed on
 a diagram.

Change-Id: I0e62f4665c8530095d1beedc2c263d6212aa53e7
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
---
 .../modelinglib/qmt/diagram_scene/items/associationitem.cpp | 6 ++++--
 .../modelinglib/qmt/diagram_scene/items/relationitem.cpp    | 3 ++-
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/associationitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/items/associationitem.cpp
index 834ccf324d4..0211700ab27 100644
--- a/src/libs/modelinglib/qmt/diagram_scene/items/associationitem.cpp
+++ b/src/libs/modelinglib/qmt/diagram_scene/items/associationitem.cpp
@@ -62,10 +62,12 @@ void AssociationItem::update(const Style *style)
 
     QMT_CHECK(m_arrow);
     QGraphicsItem *endAItem = m_diagramSceneModel->graphicsItem(m_association->endAUid());
-    QMT_CHECK(endAItem);
+    if (!endAItem)
+        return;
     placeEndLabels(m_arrow->firstLineSegment(), m_endAName, m_endACardinality, endAItem, m_arrow->startHeadLength());
     QGraphicsItem *endBItem = m_diagramSceneModel->graphicsItem(m_association->endBUid());
-    QMT_CHECK(endBItem);
+    if (!endBItem)
+        return;
     placeEndLabels(m_arrow->lastLineSegment(), m_endBName, m_endBCardinality, endBItem, m_arrow->endHeadLength());
 }
 
diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/relationitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/items/relationitem.cpp
index c3b26f0f199..caa54576e35 100644
--- a/src/libs/modelinglib/qmt/diagram_scene/items/relationitem.cpp
+++ b/src/libs/modelinglib/qmt/diagram_scene/items/relationitem.cpp
@@ -492,7 +492,8 @@ QPointF RelationItem::calcEndPoint(const Uid &end, const Uid &otherEnd, int near
 QPointF RelationItem::calcEndPoint(const Uid &end, const QPointF &otherEndPos, int nearestIntermediatePointIndex)
 {
     QGraphicsItem *endItem = m_diagramSceneModel->graphicsItem(end);
-    QMT_CHECK(endItem);
+    if (!endItem)
+        return QPointF(0, 0);
     auto endObjectItem = dynamic_cast<IIntersectionable *>(endItem);
     QPointF endPos;
     if (endObjectItem) {
-- 
GitLab