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() &&