sw/qa/uitest/writer_tests7/tdf156783.py |   63 ++++++++++++++++++++++++++++++++
 sw/source/core/crsr/crsrsh.cxx          |    2 -
 2 files changed, 64 insertions(+), 1 deletion(-)

New commits:
commit e79f0f65ab06baafc7e8a6aeb1d89ca748087b24
Author:     László Németh <nem...@numbertext.org>
AuthorDate: Wed Aug 16 21:41:26 2023 +0200
Commit:     László Németh <nem...@numbertext.org>
CommitDate: Fri Aug 18 00:06:43 2023 +0200

    tdf#156783 sw tracked table column: fix crash setting border
    
    or border padding without correct table cursor.
    
    Table formatting is allowed on text selections starting
    with tables, but adding border or border padding
    resulted crashing. This regression became more visible
    with hidden deleted table columns, where SelectTable
    (e.g. Ctrl-A) doesn't select the whole table, but only
    the text content of the visible cells, and in the case
    of hidden right table columns, without table cursor.
    
    Manual test: insert two tables in the document, and in the
    first cell of the first table, select the whole document
    by  pressing Ctrl-A 2 times or more. In table settings,
    enable table border or modify padding to crash LibreOffice.
    
    Regression since version 7.5.
    
    Change-Id: If8ebb52c7662ff37ac42348c8f412549b793b6d9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155749
    Tested-by: Jenkins
    Reviewed-by: László Németh <nem...@numbertext.org>

diff --git a/sw/qa/uitest/writer_tests7/tdf156783.py 
b/sw/qa/uitest/writer_tests7/tdf156783.py
new file mode 100644
index 000000000000..2ccdb7dcf6e1
--- /dev/null
+++ b/sw/qa/uitest/writer_tests7/tdf156783.py
@@ -0,0 +1,63 @@
+# -*- 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_state_as_dict
+from libreoffice.uno.propertyvalue import mkPropertyValues
+from uitest.uihelper.common import select_pos
+from uitest.uihelper.common import get_url_for_data_file
+
+# Bug 156783 - crash fix: setting table border on a table without correct 
table cursor
+
+class tdf156783(UITestCase):
+    def test_tdf156783(self):
+        with 
self.ui_test.load_file(get_url_for_data_file("TC-table-del-add.docx")) as 
self.document:
+
+            xToolkit = 
self.xContext.ServiceManager.createInstance('com.sun.star.awt.Toolkit')
+
+            # accept all tracked changes
+            self.xUITest.executeCommand(".uno:AcceptAllTrackedChanges")
+
+            # select all tables
+            self.xUITest.executeCommand(".uno:SelectAll")
+            self.xUITest.executeCommand(".uno:SelectAll")
+            self.xUITest.executeCommand(".uno:SelectAll")
+
+            # dialog Table Properties - Borders
+            with 
self.ui_test.execute_dialog_through_command(".uno:TableDialog", 
close_button="ok") as xDialog:
+                tabcontrol = xDialog.getChild("tabcontrol")
+                select_pos(tabcontrol, "3")
+
+                sync = xDialog.getChild("sync")
+                rightmf = xDialog.getChild("rightmf")
+                leftmf = xDialog.getChild("leftmf")
+                topmf = xDialog.getChild("topmf")
+                bottommf = xDialog.getChild("bottommf")
+                sync.executeAction("CLICK", tuple())
+
+                rightmf.executeAction("TYPE", 
mkPropertyValues({"KEYCODE":"CTRL+A"}))
+                rightmf.executeAction("TYPE", 
mkPropertyValues({"KEYCODE":"BACKSPACE"}))
+                rightmf.executeAction("TYPE", 
mkPropertyValues({"TEXT":"72pt"}))
+                leftmf.executeAction("TYPE", 
mkPropertyValues({"KEYCODE":"CTRL+A"}))
+                leftmf.executeAction("TYPE", 
mkPropertyValues({"KEYCODE":"BACKSPACE"}))
+                leftmf.executeAction("TYPE", mkPropertyValues({"TEXT":"72pt"}))
+                topmf.executeAction("TYPE", 
mkPropertyValues({"KEYCODE":"CTRL+A"}))
+                topmf.executeAction("TYPE", 
mkPropertyValues({"KEYCODE":"BACKSPACE"}))
+                topmf.executeAction("TYPE", mkPropertyValues({"TEXT":"72pt"}))
+                bottommf.executeAction("TYPE", 
mkPropertyValues({"KEYCODE":"CTRL+A"}))
+                bottommf.executeAction("TYPE", 
mkPropertyValues({"KEYCODE":"BACKSPACE"}))
+                bottommf.executeAction("TYPE", 
mkPropertyValues({"TEXT":"72pt"}))
+
+                self.assertEqual(get_state_as_dict(rightmf)["Text"], u"72pt")
+                self.assertEqual(get_state_as_dict(leftmf)["Text"], u"72pt")
+                self.assertEqual(get_state_as_dict(topmf)["Text"], u"72pt")
+                self.assertEqual(get_state_as_dict(bottommf)["Text"], u"72pt")
+
+            # Without the fix in place, this test would have crashed here
+
+# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx
index 9fb43ff2d596..f22e0bc9450a 100644
--- a/sw/source/core/crsr/crsrsh.cxx
+++ b/sw/source/core/crsr/crsrsh.cxx
@@ -599,7 +599,7 @@ bool SwCursorShell::SttEndDoc( bool bStt )
 
 const SwTableNode* SwCursorShell::IsCursorInTable() const
 {
-    if (m_pTableCursor)
+    if (m_pTableCursor && m_pTableCursor->GetSelectedBoxesCount())
     {   // find the table that has the selected boxes
         return 
m_pTableCursor->GetSelectedBoxes()[0]->GetSttNd()->FindTableNode();
     }

Reply via email to