diff options
author | László Németh <nemeth@numbertext.org> | 2023-02-17 16:23:12 +0100 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2023-02-22 08:26:36 +0000 |
commit | 6c81e52f26f8bad39c741083fad6f21126ace53c (patch) | |
tree | 6d99ef173209717eceec9ef32dd504d88cfc18b3 | |
parent | 389cdfa04fbf7bffde6af9e6c87325579e3e136a (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.odt | bin | 0 -> 18603 bytes | |||
-rw-r--r-- | sw/qa/uitest/writer_tests7/tdf132714.py | 23 | ||||
-rw-r--r-- | sw/source/core/unocore/unochart.cxx | 6 |
3 files changed, 29 insertions, 0 deletions
diff --git a/sw/qa/uitest/data/tdf132714.odt b/sw/qa/uitest/data/tdf132714.odt Binary files differnew file mode 100644 index 000000000000..e1a4a2c5ad51 --- /dev/null +++ b/sw/qa/uitest/data/tdf132714.odt 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; |