summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLászló Németh <nemeth@numbertext.org>2023-02-17 16:23:12 +0100
committerXisco Fauli <xiscofauli@libreoffice.org>2023-02-22 08:26:36 +0000
commit6c81e52f26f8bad39c741083fad6f21126ace53c (patch)
tree6d99ef173209717eceec9ef32dd504d88cfc18b3
parent389cdfa04fbf7bffde6af9e6c87325579e3e136a (diff)
tdf#132714 sw: fix crash at table row deletion associated to a chart
Using the table toolbar, deletion of the row of a text table resulted crashing in ActualizeSelection(), if the text table is associated to a chart, and the deleted row was the first data row of the chart. Fix this by emptying the outdated table selection cache m_SelectedBoxes in GetCellRangeName(). Note: since commit eea37aa26932d06ed8e93d001862bf45175c4446 "tdf#122995 Trigger Chart refresh directly in UpdateCharts for SW", the crash occurred immediately, i.e. without double clicking on the chart after the row deletion. Note: uitest needed to get the crash, not uiwriter. Change-Id: I78d126f245839ec1d8a8cc01257fe96d94ac0a21 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147224 Tested-by: László Németh <nemeth@numbertext.org> Reviewed-by: László Németh <nemeth@numbertext.org> (cherry picked from commit 5b9855acc7fa6d1e4a5f53ff0bc47e1dd4729827) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147251 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
-rw-r--r--sw/qa/uitest/data/tdf132714.odtbin0 -> 18603 bytes
-rw-r--r--sw/qa/uitest/writer_tests7/tdf132714.py23
-rw-r--r--sw/source/core/unocore/unochart.cxx6
3 files changed, 29 insertions, 0 deletions
diff --git a/sw/qa/uitest/data/tdf132714.odt b/sw/qa/uitest/data/tdf132714.odt
new file mode 100644
index 000000000000..e1a4a2c5ad51
--- /dev/null
+++ b/sw/qa/uitest/data/tdf132714.odt
Binary files differ
diff --git a/sw/qa/uitest/writer_tests7/tdf132714.py b/sw/qa/uitest/writer_tests7/tdf132714.py
new file mode 100644
index 000000000000..971db5f97ad3
--- /dev/null
+++ b/sw/qa/uitest/writer_tests7/tdf132714.py
@@ -0,0 +1,23 @@
+# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+from uitest.framework import UITestCase
+from uitest.uihelper.common import get_url_for_data_file
+
+class tdf132714(UITestCase):
+ def test_tdf132714(self):
+ with self.ui_test.load_file(get_url_for_data_file("tdf132714.odt")) as document:
+
+ # delete second row (first data row) in the associated text table of the chart
+ self.xUITest.executeCommand(".uno:GoDown")
+ self.xUITest.executeCommand(".uno:GoDown")
+ self.xUITest.executeCommand(".uno:GoDown")
+ # Without the fix in place, at this point crash occurs.
+ self.xUITest.executeCommand(".uno:DeleteRows")
+
+# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx
index c8c282c1d50d..89352f4af0d0 100644
--- a/sw/source/core/unocore/unochart.cxx
+++ b/sw/source/core/unocore/unochart.cxx
@@ -205,6 +205,12 @@ static OUString GetCellRangeName( const SwFrameFormat &rTableFormat, SwUnoCursor
SwUnoTableCursor* pUnoTableCursor = dynamic_cast<SwUnoTableCursor*>(&rTableCursor);
if (!pUnoTableCursor)
return OUString();
+
+ // tdf#132714 empty outdated selection cache to avoid crashing in ActualizeSelection()
+ size_t nCount = pUnoTableCursor->GetSelectedBoxesCount();
+ while (nCount--)
+ pUnoTableCursor->DeleteBox(nCount);
+
pUnoTableCursor->MakeBoxSels();
const SwStartNode* pStart;