sc/source/filter/xml/xmlexprt.cxx | 72 +++++++++++++++++++++----------------- sc/source/filter/xml/xmlimprt.cxx | 12 +++--- 2 files changed, 48 insertions(+), 36 deletions(-)
New commits: commit 95563e734722449c150c8e9ba88f12f100d50294 Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Wed Nov 27 10:15:29 2024 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Wed Nov 27 13:03:43 2024 +0100 PVS: V595 The 'mpDoc' pointer was utilized before it was... ... verified against nullptr And some other related cases Change-Id: If07cad3286afbc6e3058ed951128f501b11d79b6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177395 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> Tested-by: Jenkins diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx index 42f306123890..2a5610483cc3 100644 --- a/sc/source/filter/xml/xmlexprt.cxx +++ b/sc/source/filter/xml/xmlexprt.cxx @@ -678,7 +678,7 @@ table::CellRangeAddress ScXMLExport::GetEndAddress(const uno::Reference<sheet::X void ScXMLExport::GetAreaLinks( ScMyAreaLinksContainer& rAreaLinks ) { - if (mpDoc->GetLinkManager()) + if (mpDoc && mpDoc->GetLinkManager()) { const sfx2::SvBaseLinks& rLinks = mpDoc->GetLinkManager()->GetLinks(); for (const auto & rLink : rLinks) @@ -883,6 +883,9 @@ void ScXMLExport::ExportExternalRefCacheStyles() // No entry index for the number format is found. return; + if (!mpDoc) + return; + ScExternalRefManager* pRefMgr = mpDoc->GetExternalRefManager(); if (!pRefMgr->hasExternalData()) // No external reference data cached. @@ -1253,6 +1256,9 @@ void ScXMLExport::ExportCellTextAutoStyles(sal_Int32 nTable) if (!ValidTab(nTable)) return; + if (!mpDoc) + return; + rtl::Reference<XMLPropertySetMapper> xMapper = GetTextParagraphExport()->GetTextPropMapper()->getPropertySetMapper(); rtl::Reference<SvXMLAutoStylePoolP> xStylePool = GetAutoStylePool(); const ScXMLEditAttributeMap& rAttrMap = GetEditAttributeMap(); @@ -1448,31 +1454,25 @@ void ScXMLExport::OpenRow(const sal_Int32 nTable, const sal_Int32 nStartRow, con if (nRow == nStartRow) { nPrevIndex = pRowStyles->GetStyleNameIndex(nTable, nRow); - if (mpDoc) + if (nRow > nEndRowHidden) { - if (nRow > nEndRowHidden) - { - bPrevHidden = rRowAttr.rowHidden(nTable, nRow, nEndRowHidden); - bHidden = bPrevHidden; - } - if (nRow > nEndRowFiltered) - { - bPrevFiltered = rRowAttr.rowFiltered(nTable, nRow, nEndRowFiltered); - bFiltered = bPrevFiltered; - } + bPrevHidden = rRowAttr.rowHidden(nTable, nRow, nEndRowHidden); + bHidden = bPrevHidden; + } + if (nRow > nEndRowFiltered) + { + bPrevFiltered = rRowAttr.rowFiltered(nTable, nRow, nEndRowFiltered); + bFiltered = bPrevFiltered; } } else { nIndex = pRowStyles->GetStyleNameIndex(nTable, nRow); - if (mpDoc) - { - if (nRow > nEndRowHidden) - bHidden = rRowAttr.rowHidden(nTable, nRow, nEndRowHidden); - if (nRow > nEndRowFiltered) - bFiltered = rRowAttr.rowFiltered(nTable, nRow, nEndRowFiltered); - } + if (nRow > nEndRowHidden) + bHidden = rRowAttr.rowHidden(nTable, nRow, nEndRowHidden); + if (nRow > nEndRowFiltered) + bFiltered = rRowAttr.rowFiltered(nTable, nRow, nEndRowFiltered); if (nIndex == nPrevIndex && bHidden == bPrevHidden && bFiltered == bPrevFiltered && !(bHasRowHeader && ((nRow == aRowHeaderRange.aStart.Row()) || (nRow - 1 == aRowHeaderRange.aEnd.Row()))) && !(pGroupRows->IsGroupStart(nRow)) && @@ -1499,13 +1499,10 @@ void ScXMLExport::OpenRow(const sal_Int32 nTable, const sal_Int32 nStartRow, con sal_Int32 nIndex = pRowStyles->GetStyleNameIndex(nTable, nStartRow); bool bHidden = false; bool bFiltered = false; - if (mpDoc) - { - sal_Int32 nEndRowHidden; - sal_Int32 nEndRowFiltered; - bHidden = rRowAttr.rowHidden(nTable, nStartRow, nEndRowHidden); - bFiltered = rRowAttr.rowFiltered(nTable, nStartRow, nEndRowFiltered); - } + sal_Int32 nEndRowHidden; + sal_Int32 nEndRowFiltered; + bHidden = rRowAttr.rowHidden(nTable, nStartRow, nEndRowHidden); + bFiltered = rRowAttr.rowFiltered(nTable, nStartRow, nEndRowFiltered); assert(nIndex >= 0 && "coverity#1438402"); OpenNewRow(nIndex, nStartRow, 1, bHidden, bFiltered); } @@ -2701,6 +2698,9 @@ void ScXMLExport::CollectInternalShape( uno::Reference< drawing::XShape > const if( !pObject ) return; + if (!mpDoc) + return; + // collect note caption objects from all layers (internal or hidden) if( ScDrawObjData* pCaptData = ScDrawLayer::GetNoteCaptionData( pObject, static_cast< SCTAB >( nCurrentTable ) ) ) { @@ -3227,7 +3227,7 @@ void ScXMLExport::WriteCell(ScMyCell& aCell, sal_Int32 nEqualCellCount) ScFormulaCell* pFormulaCell = aCell.maBaseCell.getFormula(); if (!bIsMatrix || bIsFirstMatrixCell) { - if (!mpCompileFormulaCxt) + if (!mpCompileFormulaCxt && mpDoc) { const formula::FormulaGrammar::Grammar eGrammar = mpDoc->GetStorageGrammar(); mpCompileFormulaCxt.reset(new sc::CompileFormulaContext(*mpDoc, eGrammar)); @@ -3321,12 +3321,10 @@ void ScXMLExport::WriteCell(ScMyCell& aCell, sal_Int32 nEqualCellCount) { WriteMultiLineFormulaResult(aCell.maBaseCell.getFormula()); } - else + else if (mpDoc) { SvXMLElementExport aElemP(*this, sElemP, true, false); - assert(mpDoc); - OUString aParaStr = ScCellFormat::GetOutputString(*mpDoc, aCell.maCellAddress, aCell.maBaseCell); @@ -3687,7 +3685,7 @@ void ScXMLExport::WriteTableShapes() { if (rxShape.is()) { - if (mpDoc->IsNegativePage(static_cast<SCTAB>(nCurrentTable))) + if (mpDoc && mpDoc->IsNegativePage(static_cast<SCTAB>(nCurrentTable))) { // RTL-mirroring refers to snap rectangle, not to logic rectangle, therefore cannot use // getPosition() and getSize(), but need property "FrameRect" from rxShape or @@ -3802,6 +3800,9 @@ void ScXMLExport::exportAnnotationMeta( const uno::Reference < drawing::XShape > void ScXMLExport::WriteAnnotation(const ScMyCell& rMyCell) { + if (!mpDoc) + return; + ScPostIt* pNote = mpDoc->GetNote(rMyCell.maCellAddress); if (!pNote) return; @@ -4259,6 +4260,9 @@ void ScXMLExport::WriteExternalDataTransformations(const std::vector<std::shared break; case sc::TransformationType::SORT_TRANSFORMATION: { + if (!mpDoc) + return; + // Sort Transformation std::shared_ptr<sc::SortTransformation> aSortTransformation = std::dynamic_pointer_cast<sc::SortTransformation>(itr); ScSortParam aSortParam = aSortTransformation->getSortParam(); @@ -4550,6 +4554,9 @@ void ScXMLExport::WriteDataStream() void ScXMLExport::WriteNamedRange(ScRangeName* pRangeName) { + if (!mpDoc) + return; + //write a global or local ScRangeName SvXMLElementExport aElemNEs(*this, XML_NAMESPACE_TABLE, XML_NAMED_EXPRESSIONS, true, true); for (const auto& rxEntry : *pRangeName) @@ -4690,6 +4697,9 @@ OUString getDateStringForType(condformat::ScCondFormatDateType eType) void ScXMLExport::ExportConditionalFormat(SCTAB nTab) { + if (!mpDoc) + return; + ScConditionalFormatList* pCondFormatList = mpDoc->GetCondFormList(nTab); if(!pCondFormatList) return; diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx index d38683a953e5..d992fd2c5f84 100644 --- a/sc/source/filter/xml/xmlimprt.cxx +++ b/sc/source/filter/xml/xmlimprt.cxx @@ -753,7 +753,7 @@ void ScXMLImport::SetConfigurationSettings(const uno::Sequence<beans::PropertyVa { uno::Sequence<sal_Int8> aPass; ::comphelper::Base64::decode(aPass, sKey); - if (aPass.hasElements()) + if (mpDoc && aPass.hasElements()) { if (mpDoc->GetChangeTrack()) mpDoc->GetChangeTrack()->SetProtection(aPass); @@ -805,7 +805,7 @@ sal_Int32 ScXMLImport::SetCurrencySymbol(const sal_Int32 nKey, std::u16string_vi if (xProperties.is()) { lang::Locale aLocale; - if (mpDoc && (xProperties->getPropertyValue(SC_LOCALE) >>= aLocale)) + if (xProperties->getPropertyValue(SC_LOCALE) >>= aLocale) { { ScXMLImport::MutexGuard aGuard(*this); @@ -1208,6 +1208,9 @@ void ScXMLImport::SetLabelRanges() if (maMyLabelRanges.empty()) return; + if (!mpDoc) + return; + rtl::Reference<ScModelObj> xPropertySet (GetScModel()); if (!xPropertySet.is()) return; @@ -1230,7 +1233,6 @@ void ScXMLImport::SetLabelRanges() sal_Int32 nOffset2(0); FormulaGrammar::AddressConvention eConv = FormulaGrammar::CONV_OOO; - assert(mpDoc); if (ScRangeStringConverter::GetRangeFromString( aLabelRange, rLabelRange.sLabelRangeStr, *mpDoc, eConv, nOffset1 ) && ScRangeStringConverter::GetRangeFromString( aDataRange, rLabelRange.sDataRangeStr, *mpDoc, eConv, nOffset2 )) { @@ -1374,7 +1376,7 @@ void SAL_CALL ScXMLImport::endDocument() if(rProp.Value >>= sTabName) { SCTAB nTab(0); - if (mpDoc->GetTable(sTabName, nTab)) + if (mpDoc && mpDoc->GetTable(sTabName, nTab)) { mpDoc->SetVisibleTab(nTab); break; @@ -1637,7 +1639,7 @@ FormulaError ScXMLImport::GetFormulaErrorConstant( const OUString& rStr ) const ScEditEngineDefaulter* ScXMLImport::GetEditEngine() { - if (!mpEditEngine) + if (!mpEditEngine && mpDoc) { mpEditEngine.reset(new ScEditEngineDefaulter(mpDoc->GetEnginePool())); mpEditEngine->SetRefMapMode(MapMode(MapUnit::Map100thMM));