sw/qa/uitest/data/tdf132714.odt         |binary
 sw/qa/uitest/writer_tests7/tdf132714.py |   23 +++++++++++++++++++++++
 sw/source/core/unocore/unochart.cxx     |    6 ++++++
 3 files changed, 29 insertions(+)

New commits:
commit 8872ae3f6e86aca7f6ecc156caa3a1a8694deb6d
Author:     László Németh <nem...@numbertext.org>
AuthorDate: Fri Feb 17 16:23:12 2023 +0100
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Mon Feb 27 09:00:54 2023 +0000

    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 <nem...@numbertext.org>
    Reviewed-by: László Németh <nem...@numbertext.org>
    (cherry picked from commit 5b9855acc7fa6d1e4a5f53ff0bc47e1dd4729827)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147251
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>
    (cherry picked from commit 6c81e52f26f8bad39c741083fad6f21126ace53c)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147436
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

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 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;

Reply via email to