From 2bbd570754e6d65d9366200f3ba4b560e91ba6f1 Mon Sep 17 00:00:00 2001 From: tetektoza Date: Thu, 12 Jun 2025 23:30:13 +0200 Subject: [PATCH] Sketcher: Fix OOB access to OVPs Stupid mistake of mine from previous refactor - some of the OVPs do not contain those elements and thus should not be accessed prematurely. This patch moves access to the OVPs when it's actually needed so it won't go out of bounds. --- src/Mod/Sketcher/Gui/DrawSketchHandlerArc.h | 8 +++----- src/Mod/Sketcher/Gui/DrawSketchHandlerCircle.h | 16 +++++++++------- src/Mod/Sketcher/Gui/DrawSketchHandlerEllipse.h | 6 +++--- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandlerArc.h b/src/Mod/Sketcher/Gui/DrawSketchHandlerArc.h index 31d94c7e9e..4c590150ee 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandlerArc.h +++ b/src/Mod/Sketcher/Gui/DrawSketchHandlerArc.h @@ -587,7 +587,6 @@ void DSHArcControllerBase::doEnforceControlParameters(Base::Vector2d& onSketchPo } break; case SelectMode::SeekThird: { auto& fifthParam = onViewParameters[OnViewParameter::Fifth]; - auto& sixthParam = onViewParameters[OnViewParameter::Sixth]; if (handler->constructionMethod() == DrawSketchHandlerArc::ConstructionMethod::Center) { if (fifthParam->isSet) { @@ -602,6 +601,7 @@ void DSHArcControllerBase::doEnforceControlParameters(Base::Vector2d& onSketchPo } } else { + auto& sixthParam = onViewParameters[OnViewParameter::Sixth]; if (fifthParam->isSet) { onSketchPos.x = fifthParam->getValue(); } @@ -677,7 +677,6 @@ void DSHArcController::adaptParameters(Base::Vector2d onSketchPos) } break; case SelectMode::SeekThird: { auto& fifthParam = onViewParameters[OnViewParameter::Fifth]; - auto& sixthParam = onViewParameters[OnViewParameter::Sixth]; if (handler->constructionMethod() == DrawSketchHandlerArc::ConstructionMethod::Center) { double range = Base::toDegrees(handler->arcAngle); @@ -693,6 +692,7 @@ void DSHArcController::adaptParameters(Base::Vector2d onSketchPos) fifthParam->setLabelRange(handler->arcAngle); } else { + auto& sixthParam = onViewParameters[OnViewParameter::Sixth]; if (!fifthParam->isSet) { setOnViewParameterValue(OnViewParameter::Fifth, onSketchPos.x); } @@ -734,15 +734,13 @@ void DSHArcController::doChangeDrawSketchHandlerMode() } } break; case SelectMode::SeekThird: { + auto& fifthParam = onViewParameters[OnViewParameter::Fifth]; if (handler->constructionMethod() == DrawSketchHandlerArc::ConstructionMethod::Center) { - auto& fifthParam = onViewParameters[OnViewParameter::Fifth]; - if (fifthParam->hasFinishedEditing) { handler->setState(SelectMode::End); } } else { - auto& fifthParam = onViewParameters[OnViewParameter::Fifth]; auto& sixthParam = onViewParameters[OnViewParameter::Sixth]; if (fifthParam->hasFinishedEditing || sixthParam->hasFinishedEditing) { diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandlerCircle.h b/src/Mod/Sketcher/Gui/DrawSketchHandlerCircle.h index 7389906e9e..70127148e6 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandlerCircle.h +++ b/src/Mod/Sketcher/Gui/DrawSketchHandlerCircle.h @@ -451,7 +451,6 @@ void DSHCircleControllerBase::doEnforceControlParameters(Base::Vector2d& onSketc } break; case SelectMode::SeekSecond: { auto& thirdParam = onViewParameters[OnViewParameter::Third]; - auto& fourthParam = onViewParameters[OnViewParameter::Fourth]; if (handler->constructionMethod() == DrawSketchHandlerCircle::ConstructionMethod::Center) { @@ -472,6 +471,7 @@ void DSHCircleControllerBase::doEnforceControlParameters(Base::Vector2d& onSketc } } else { + auto& fourthParam = onViewParameters[OnViewParameter::Fourth]; if (thirdParam->isSet) { onSketchPos.x = thirdParam->getValue(); } @@ -533,7 +533,6 @@ void DSHCircleController::adaptParameters(Base::Vector2d onSketchPos) } break; case SelectMode::SeekSecond: { auto& thirdParam = onViewParameters[OnViewParameter::Third]; - auto& fourthParam = onViewParameters[OnViewParameter::Fourth]; if (handler->constructionMethod() == DrawSketchHandlerCircle::ConstructionMethod::Center) { @@ -557,6 +556,7 @@ void DSHCircleController::adaptParameters(Base::Vector2d onSketchPos) thirdParam->setPoints(start, end); } else { + auto& fourthParam = onViewParameters[OnViewParameter::Fourth]; if (!thirdParam->isSet) { setOnViewParameterValue(OnViewParameter::Third, onSketchPos.x); } @@ -609,7 +609,6 @@ void DSHCircleController::doChangeDrawSketchHandlerMode() } break; case SelectMode::SeekSecond: { auto& thirdParam = onViewParameters[OnViewParameter::Third]; - auto& fourthParam = onViewParameters[OnViewParameter::Fourth]; if (thirdParam->hasFinishedEditing && handler->constructionMethod() @@ -617,11 +616,14 @@ void DSHCircleController::doChangeDrawSketchHandlerMode() handler->setState(SelectMode::End); } - else if (onViewParameters.size() > 3 && thirdParam->isSet && fourthParam->isSet - && handler->constructionMethod() - == DrawSketchHandlerCircle::ConstructionMethod::ThreeRim) { + else if (onViewParameters.size() > 3) { + auto& fourthParam = onViewParameters[OnViewParameter::Fourth]; + if (thirdParam->isSet && fourthParam->isSet + && handler->constructionMethod() + == DrawSketchHandlerCircle::ConstructionMethod::ThreeRim) { - handler->setState(SelectMode::SeekThird); + handler->setState(SelectMode::SeekThird); + } } } break; case SelectMode::SeekThird: { diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandlerEllipse.h b/src/Mod/Sketcher/Gui/DrawSketchHandlerEllipse.h index 8e4991699e..24c47734a6 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandlerEllipse.h +++ b/src/Mod/Sketcher/Gui/DrawSketchHandlerEllipse.h @@ -556,7 +556,6 @@ void DSHEllipseControllerBase::doEnforceControlParameters(Base::Vector2d& onSket } break; case SelectMode::SeekThird: { auto& fifthParam = onViewParameters[OnViewParameter::Fifth]; - auto& sixthParam = onViewParameters[OnViewParameter::Sixth]; if (handler->constructionMethod() == DrawSketchHandlerEllipse::ConstructionMethod::Center) { @@ -570,6 +569,7 @@ void DSHEllipseControllerBase::doEnforceControlParameters(Base::Vector2d& onSket } } else { + auto& sixthParam = onViewParameters[OnViewParameter::Sixth]; if (fifthParam->isSet) { onSketchPos.x = fifthParam->getValue(); } @@ -655,7 +655,6 @@ void DSHEllipseController::adaptParameters(Base::Vector2d onSketchPos) } break; case SelectMode::SeekThird: { auto& fifthParam = onViewParameters[OnViewParameter::Fifth]; - auto& sixthParam = onViewParameters[OnViewParameter::Sixth]; if (handler->constructionMethod() == DrawSketchHandlerEllipse::ConstructionMethod::Center) { @@ -669,6 +668,7 @@ void DSHEllipseController::adaptParameters(Base::Vector2d onSketchPos) fifthParam->setPoints(start, end); } else { + auto& sixthParam = onViewParameters[OnViewParameter::Sixth]; if (!fifthParam->isSet) { setOnViewParameterValue(OnViewParameter::Fifth, onSketchPos.x); } @@ -711,7 +711,6 @@ void DSHEllipseController::doChangeDrawSketchHandlerMode() } break; case SelectMode::SeekThird: { auto& fifthParam = onViewParameters[OnViewParameter::Fifth]; - auto& sixthParam = onViewParameters[OnViewParameter::Sixth]; if (handler->constructionMethod() == DrawSketchHandlerEllipse::ConstructionMethod::Center) { @@ -720,6 +719,7 @@ void DSHEllipseController::doChangeDrawSketchHandlerMode() } } else { + auto& sixthParam = onViewParameters[OnViewParameter::Sixth]; if (fifthParam->hasFinishedEditing || sixthParam->hasFinishedEditing) { handler->setState(SelectMode::End); }