From 1feb9682c347e9a8c6f76b9391a3760452d23e99 Mon Sep 17 00:00:00 2001 From: László Németh Date: Fri, 17 Feb 2023 16:23:12 +0100 Subject: tdf#132714 sw: fix crash at table row deletion associated to a chart MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: László Németh (cherry picked from commit 5b9855acc7fa6d1e4a5f53ff0bc47e1dd4729827) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147250 Tested-by: Jenkins Reviewed-by: Michael Stahl --- sw/qa/uitest/data/tdf132714.odt | Bin 0 -> 18603 bytes sw/qa/uitest/writer_tests7/tdf132714.py | 23 +++++++++++++++++++++++ sw/source/core/unocore/unochart.cxx | 6 ++++++ 3 files changed, 29 insertions(+) create mode 100644 sw/qa/uitest/data/tdf132714.odt create mode 100644 sw/qa/uitest/writer_tests7/tdf132714.py diff --git a/sw/qa/uitest/data/tdf132714.odt b/sw/qa/uitest/data/tdf132714.odt new file mode 100644 index 000000000000..e1a4a2c5ad51 Binary files /dev/null and b/sw/qa/uitest/data/tdf132714.odt 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 03886d20bc5d..87dbbcce50a7 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(&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; -- cgit v1.2.3