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));

Reply via email to