From b9e79be0a7944a94ee95250f6e06f5c751c9d052 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 14 Jun 2020 16:23:16 +0200 Subject: [PATCH] Sketcher: [skip ci] add security checks before accessing pointer --- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index d2161d76cf..2f79dcd7a4 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -3069,8 +3069,8 @@ void ViewProviderSketch::drawConstraintIcons() { // second icon is available only for colinear line segments const Part::Geometry *geo1 = getSketchObject()->getGeometry((*it)->First); const Part::Geometry *geo2 = getSketchObject()->getGeometry((*it)->Second); - if (geo1->getTypeId() == Part::GeomLineSegment::getClassTypeId() && - geo2->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { + if (geo1 && geo1->getTypeId() == Part::GeomLineSegment::getClassTypeId() && + geo2 && geo2->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { multipleIcons = true; } } @@ -5453,15 +5453,18 @@ void ViewProviderSketch::rebuildConstraintsVisual(void) if ((*it)->Type == Tangent) { const Part::Geometry *geo1 = getSketchObject()->getGeometry((*it)->First); const Part::Geometry *geo2 = getSketchObject()->getGeometry((*it)->Second); - if (geo1->getTypeId() == Part::GeomLineSegment::getClassTypeId() && - geo2->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { + if (!geo1 || !geo2) { + Base::Console().Warning("Tangent constraint references non-existing geometry\n"); + } + else if (geo1->getTypeId() == Part::GeomLineSegment::getClassTypeId() && + geo2->getTypeId() == Part::GeomLineSegment::getClassTypeId()) { // #define CONSTRAINT_SEPARATOR_INDEX_SECOND_TRANSLATION 4 sep->addChild(new SoZoomTranslation()); // #define CONSTRAINT_SEPARATOR_INDEX_SECOND_ICON 5 sep->addChild(new SoImage()); // #define CONSTRAINT_SEPARATOR_INDEX_SECOND_CONSTRAINTID 6 sep->addChild(new SoInfo()); - } + } } edit->vConstrType.push_back((*it)->Type);