From f5cfd3d64c6405c03608da8e5907465a2203ba2d Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 20 Aug 2025 10:15:08 +0200 Subject: [PATCH] Sheet: Verify that UnitExpression is valid The crash happens because the UnitExpression is null and thus segfaults when trying to access the unit and scalar value. This fixes https://github.com/FreeCAD/FreeCAD/issues/23222 --- src/Mod/Spreadsheet/Gui/PropertiesDialog.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Mod/Spreadsheet/Gui/PropertiesDialog.cpp b/src/Mod/Spreadsheet/Gui/PropertiesDialog.cpp index 3cecd1940a..35a6bc2e16 100644 --- a/src/Mod/Spreadsheet/Gui/PropertiesDialog.cpp +++ b/src/Mod/Spreadsheet/Gui/PropertiesDialog.cpp @@ -221,12 +221,19 @@ void PropertiesDialog::displayUnitChanged(const QString& text) QPalette palette = ui->displayUnit->palette(); try { - std::unique_ptr e( + std::unique_ptr expr( App::ExpressionParser::parseUnit(sheet, text.toUtf8().constData())); - displayUnit = DisplayUnit(text.toUtf8().constData(), e->getUnit(), e->getScaler()); - palette.setColor(QPalette::Text, Qt::black); - displayUnitOk = true; + if (expr) { + displayUnit = DisplayUnit(text.toStdString(), expr->getUnit(), expr->getScaler()); + palette.setColor(QPalette::Text, Qt::black); + displayUnitOk = true; + } + else { + displayUnit = DisplayUnit(); + palette.setColor(QPalette::Text, text.size() == 0 ? Qt::black : Qt::red); + displayUnitOk = false; + } } catch (...) { displayUnit = DisplayUnit();