sc/qa/unit/uicalc/data/simpleTable.xlsx |binary
 sc/qa/unit/uicalc/uicalc.cxx            |   15 +++++++++++++++
 sc/source/core/tool/dbdata.cxx          |    7 ++++++-
 sw/source/core/docnode/ndtbl.cxx        |    1 +
 4 files changed, 22 insertions(+), 1 deletion(-)

New commits:
commit 2135706397d36aa7ea24650b65859be0b6860a65
Author:     Paris Oplopoios <paris.oplopo...@collabora.com>
AuthorDate: Wed Mar 8 23:04:49 2023 +0200
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Thu Mar 16 13:08:25 2023 +0000

    tdf#154061 Make sure table column attributes size is correct
    
    Resize maTableColumnAttributes to match the amount of columns, fixes
    crash upon undoing a column insertion on a table
    
    Change-Id: Iad4b8ac5c38d5d1065d6ef1267ce3f5d3b28afa8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148492
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/sc/qa/unit/uicalc/data/simpleTable.xlsx 
b/sc/qa/unit/uicalc/data/simpleTable.xlsx
new file mode 100644
index 000000000000..fd4e394732ba
Binary files /dev/null and b/sc/qa/unit/uicalc/data/simpleTable.xlsx differ
diff --git a/sc/qa/unit/uicalc/uicalc.cxx b/sc/qa/unit/uicalc/uicalc.cxx
index 421f96410e6f..4fb9416badd8 100644
--- a/sc/qa/unit/uicalc/uicalc.cxx
+++ b/sc/qa/unit/uicalc/uicalc.cxx
@@ -2221,6 +2221,21 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf142010)
     CPPUNIT_ASSERT_EQUAL(5.0, pDoc->GetValue(ScAddress(5, 71, 0)));
 }
 
+CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf154061)
+{
+    createScDoc("simpleTable.xlsx");
+    ScDocument* pDoc = getScDoc();
+    CPPUNIT_ASSERT_EQUAL(OUString("Column2"), pDoc->GetString(ScAddress(1, 0, 
0)));
+
+    goToCell("B1");
+
+    // Without the fix in place, it would crash here due to an out of bounds 
array access
+    dispatchCommand(mxComponent, ".uno:InsertColumnsBefore", {});
+    CPPUNIT_ASSERT_EQUAL(OUString("Column2"), pDoc->GetString(ScAddress(2, 0, 
0)));
+    dispatchCommand(mxComponent, ".uno:Undo", {});
+    CPPUNIT_ASSERT_EQUAL(OUString("Column2"), pDoc->GetString(ScAddress(1, 0, 
0)));
+}
+
 CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf132431)
 {
     createScDoc("tdf132431.ods");
diff --git a/sc/source/core/tool/dbdata.cxx b/sc/source/core/tool/dbdata.cxx
index dc10d6a0503e..293bb20a4976 100644
--- a/sc/source/core/tool/dbdata.cxx
+++ b/sc/source/core/tool/dbdata.cxx
@@ -116,6 +116,7 @@ ScDBData::ScDBData( const ScDBData& rData ) :
     bAutoFilter         (rData.bAutoFilter),
     bModified           (rData.bModified),
     maTableColumnNames  (rData.maTableColumnNames),
+    maTableColumnAttributes(rData.maTableColumnAttributes),
     mbTableColumnNamesDirty(rData.mbTableColumnNamesDirty),
     nFilteredRowCount   (rData.nFilteredRowCount)
 {
@@ -150,6 +151,7 @@ ScDBData::ScDBData( const OUString& rName, const ScDBData& 
rData ) :
     bAutoFilter         (rData.bAutoFilter),
     bModified           (rData.bModified),
     maTableColumnNames  (rData.maTableColumnNames),
+    maTableColumnAttributes(rData.maTableColumnAttributes),
     mbTableColumnNamesDirty (rData.mbTableColumnNamesDirty),
     nFilteredRowCount   (rData.nFilteredRowCount)
 {
@@ -199,6 +201,7 @@ ScDBData& ScDBData::operator= (const ScDBData& rData)
         else
         {
             maTableColumnNames  = rData.maTableColumnNames;
+            maTableColumnAttributes = rData.maTableColumnAttributes;
             mbTableColumnNamesDirty = rData.mbTableColumnNamesDirty;
         }
 
@@ -577,6 +580,7 @@ void ScDBData::UpdateMoveTab(SCTAB nOldPos, SCTAB nNewPos)
                 aRange.aEnd.Row());
         // Do not use SetTableColumnNames() because that resets 
mbTableColumnNamesDirty.
         maTableColumnNames = aNames;
+        maTableColumnAttributes.resize(aNames.size());
         mbTableColumnNamesDirty = bTableColumnNamesDirty;
     }
 
@@ -620,6 +624,7 @@ bool ScDBData::UpdateReference(const ScDocument* pDoc, 
UpdateRefMode eUpdateRefM
             MoveTo( theTab1, theCol1, theRow1, theCol2, theRow2 );
         // Do not use SetTableColumnNames() because that resets 
mbTableColumnNamesDirty.
         maTableColumnNames = aNames;
+        maTableColumnAttributes.resize(aNames.size());
         mbTableColumnNamesDirty = bTableColumnNamesDirty;
     }
 
@@ -721,7 +726,6 @@ void ScDBData::AdjustTableColumnAttributes( UpdateRefMode 
eUpdateRefMode, SCCOL
                 n += nDx;
             aNewNames.resize(n);
             aNewAttributes.resize(n);
-            maTableColumnAttributes.resize(n);
             // Copy head.
             for (size_t i = 0; i < nHead; ++i)
             {
@@ -876,6 +880,7 @@ void ScDBData::RefreshTableColumnNames( ScDocument* pDoc )
     }
 
     aNewNames.swap( maTableColumnNames);
+    maTableColumnAttributes.resize(maTableColumnNames.size());
     mbTableColumnNamesDirty = false;
 }
 
commit 67d353ff50712a036d04b1c0ffab68f2a21b5008
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Wed Mar 15 20:05:33 2023 +0000
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Thu Mar 16 13:08:20 2023 +0000

    Related: tdf#154205 skip Invalidating content a11y relations when closing 
doc
    
    Change-Id: If6dbc02f1ec22be9f020290572199f89548c76e1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148939
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx
index 116ec8c6f62f..9f0a89ccad51 100644
--- a/sw/source/core/docnode/ndtbl.cxx
+++ b/sw/source/core/docnode/ndtbl.cxx
@@ -2429,6 +2429,7 @@ void SwTableNode::DelFrames(SwRootFrame const*const 
pLayout)
                 // Relation CONTENT_FLOWS_FROM for current next paragraph will 
change
                 // and relation CONTENT_FLOWS_TO for current previous 
paragraph will change.
 #if !ENABLE_WASM_STRIP_ACCESSIBILITY
+                if (!GetDoc().IsInDtor())
                 {
                     SwViewShell* pViewShell( 
pFrame->getRootFrame()->GetCurrShell() );
                     if ( pViewShell && pViewShell->GetLayout() &&

Reply via email to