From a46f79aa684f3bd0a1e9a6f7be7d41b3bb02a145 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 16 Mar 2025 14:42:06 +0100 Subject: [PATCH] Sheet: Fix crash in Cell::setContent This fixes issue 14697 --- src/Mod/Spreadsheet/App/Cell.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Mod/Spreadsheet/App/Cell.cpp b/src/Mod/Spreadsheet/App/Cell.cpp index 9668a52d14..80c6cd13ee 100644 --- a/src/Mod/Spreadsheet/App/Cell.cpp +++ b/src/Mod/Spreadsheet/App/Cell.cpp @@ -287,20 +287,21 @@ void Cell::setContent(const char* value) clearException(); if (value) { - if (owner->sheet()->isRestoring()) { + Sheet* sheet = owner->sheet(); + if (sheet && sheet->isRestoring()) { if (value[0] == '\0' || (value[0] == '\'' && value[1] == '\0')) { return; } - expression = std::make_unique(owner->sheet(), value); + expression = std::make_unique(sheet, value); setUsed(EXPRESSION_SET, true); return; } if (*value == '=') { try { - newExpr = ExpressionPtr(App::ExpressionParser::parse(owner->sheet(), value + 1)); + newExpr = ExpressionPtr(App::ExpressionParser::parse(sheet, value + 1)); } catch (Base::Exception& e) { - newExpr = std::make_unique(owner->sheet(), value); + newExpr = std::make_unique(sheet, value); setParseException(e.what()); } } @@ -309,7 +310,7 @@ void Cell::setContent(const char* value) value = nullptr; } else { - newExpr = std::make_unique(owner->sheet(), value + 1); + newExpr = std::make_unique(sheet, value + 1); } } else if (*value != '\0') { @@ -320,8 +321,7 @@ void Cell::setContent(const char* value) if (errno == 0) { const bool isEndEmpty = *end == '\0' || strspn(end, " \t\n\r") == strlen(end); if (isEndEmpty) { - newExpr = std::make_unique(owner->sheet(), - Quantity(float_value)); + newExpr = std::make_unique(sheet, Quantity(float_value)); } } @@ -329,7 +329,7 @@ void Cell::setContent(const char* value) const bool isStartingWithNumber = value != end; if (!newExpr && isStartingWithNumber) { try { - ExpressionPtr parsedExpr(App::ExpressionParser::parse(owner->sheet(), value)); + ExpressionPtr parsedExpr(App::ExpressionParser::parse(sheet, value)); if (const auto fraction = freecad_cast(parsedExpr.get())) { if (fraction->getOperator() == OperatorExpression::UNIT) { @@ -384,7 +384,7 @@ void Cell::setContent(const char* value) } if (!newExpr && value && *value != '\0') { - newExpr = std::make_unique(owner->sheet(), value); + newExpr = std::make_unique(sheet, value); } // trying to add an empty string will make newExpr = nullptr