From dafb5680b291207302a7b56e64082d29cd62614e Mon Sep 17 00:00:00 2001 From: Amine0x0 Date: Fri, 26 Jun 2026 08:30:14 +0100 Subject: [PATCH 1/2] Fix UAF crash when closing document while tool is active --- src/Gui/Document.cpp | 5 ++++- src/Mod/Measure/Gui/TaskMeasure.cpp | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index 913478c1b5e0..70b72be11159 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -2852,7 +2852,10 @@ int Document::openCommand(const char* sName) void Document::commitCommand() { - getDocument()->commitTransaction(); + auto doc = getDocument(); + if (doc) { + doc->commitTransaction(); + } } void Document::abortCommand() diff --git a/src/Mod/Measure/Gui/TaskMeasure.cpp b/src/Mod/Measure/Gui/TaskMeasure.cpp index 47b9c21b446c..82d724400bde 100644 --- a/src/Mod/Measure/Gui/TaskMeasure.cpp +++ b/src/Mod/Measure/Gui/TaskMeasure.cpp @@ -258,6 +258,14 @@ TaskMeasure::TaskMeasure() if (auto* doc = Gui::Application::Instance->activeDocument()) { mTargetDoc = doc; + + m_deletedConnection = Gui::Application::Instance->signalDeleteDocument.connect( + [this, doc](const Gui::Document& deletedDoc) { + if (&deletedDoc == doc) { + this->mTargetDoc = nullptr; + } + } + ); mTargetDoc->openCommand("Add Measurement"); } From 3f88bf24e1896fbfa916fc6efc418d747306abfa Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 26 Jun 2026 15:39:25 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/Mod/Measure/Gui/TaskMeasure.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Mod/Measure/Gui/TaskMeasure.cpp b/src/Mod/Measure/Gui/TaskMeasure.cpp index 82d724400bde..9ff599871b33 100644 --- a/src/Mod/Measure/Gui/TaskMeasure.cpp +++ b/src/Mod/Measure/Gui/TaskMeasure.cpp @@ -260,12 +260,12 @@ TaskMeasure::TaskMeasure() mTargetDoc = doc; m_deletedConnection = Gui::Application::Instance->signalDeleteDocument.connect( - [this, doc](const Gui::Document& deletedDoc) { - if (&deletedDoc == doc) { - this->mTargetDoc = nullptr; - } + [this, doc](const Gui::Document& deletedDoc) { + if (&deletedDoc == doc) { + this->mTargetDoc = nullptr; } - ); + } + ); mTargetDoc->openCommand("Add Measurement"); }