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(); }