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