sw/qa/uitest/writer_tests7/tdf152964.py | 50 ++++++++++++++++++++++++++++++++ sw/source/core/docnode/ndtbl1.cxx | 1 2 files changed, 51 insertions(+)
New commits: commit 6d47b8a09f51357851cdfa752f231ed10328b8f2 Author: László Németh <nem...@numbertext.org> AuthorDate: Wed Jan 18 12:26:11 2023 +0100 Commit: Christian Lohmaier <lohmaier+libreoff...@googlemail.com> CommitDate: Thu Feb 9 11:42:38 2023 +0000 tdf#152964 sw: fix crash of Undo of tracked deletion of empty table rows In Hide Changes mode, Undo of insertion of CH_TXT_TRACKED_DUMMY_CHAR (workaround of the deletion of empty table rows), resulted a crash because of inconsistency of table and redline nodes. As a workaround, skip that insertion from the Undo. Regression from commit a74c51025fa4519caaf461492e4ed8e68bd34885 "tdf#146962 sw: hide deleted row at deletion in Hide Changes". Change-Id: I0666d7bcbbf08d84386cea64c1807f69f751479d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145737 Tested-by: Jenkins Reviewed-by: László Németh <nem...@numbertext.org> (cherry picked from commit 4e72e646255624eda698da750383a5725e8f6c4c) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145718 Reviewed-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com> diff --git a/sw/qa/uitest/writer_tests7/tdf152964.py b/sw/qa/uitest/writer_tests7/tdf152964.py new file mode 100644 index 000000000000..abbf25434668 --- /dev/null +++ b/sw/qa/uitest/writer_tests7/tdf152964.py @@ -0,0 +1,50 @@ +# -*- 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 + +# Bug 152964 - Undo of tracked deletion of an empty table row crashed Writer + + +class tdf152964(UITestCase): + def test_tdf152964(self): + with self.ui_test.create_doc_in_start_center("writer"): + + # redlining should be on + self.xUITest.executeCommand(".uno:TrackChanges") + # hide changes + self.xUITest.executeCommand(".uno:ShowTrackedChanges") + + # insert a table + xWriterDoc = self.xUITest.getTopFocusWindow() + xWriterEdit = xWriterDoc.getChild("writer_edit") + xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"})) + with self.ui_test.execute_dialog_through_command(".uno:InsertTable") as xDialog: + formatlbinstable = xDialog.getChild("formatlbinstable") + entry = formatlbinstable.getChild("1") + entry.executeAction("SELECT", tuple()) + + # delete its second and first rows + self.xUITest.executeCommand(".uno:GoDown") + self.xUITest.executeCommand(".uno:DeleteRows") + self.xUITest.executeCommand(".uno:DeleteRows") + + # This crashed Writer + self.xUITest.executeCommand(".uno:Undo") + + # test other Undos and Redos + self.xUITest.executeCommand(".uno:Undo") + self.xUITest.executeCommand(".uno:Undo") + self.xUITest.executeCommand(".uno:Redo") + self.xUITest.executeCommand(".uno:Redo") + self.xUITest.executeCommand(".uno:Redo") + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sw/source/core/docnode/ndtbl1.cxx b/sw/source/core/docnode/ndtbl1.cxx index e1888bab015b..7fa9dd53e2d9 100644 --- a/sw/source/core/docnode/ndtbl1.cxx +++ b/sw/source/core/docnode/ndtbl1.cxx @@ -640,6 +640,7 @@ void SwDoc::SetRowNotTracked( const SwCursor& rCursor, // new redline can cause a problem) if ( bInsertDummy && (pLn->IsEmpty() || bDeletionOfOwnRowInsertion ) ) { + ::sw::UndoGuard const undoGuard(GetIDocumentUndoRedo()); SwNodeIndex aInsPos( *(pLn->GetTabBoxes()[0]->GetSttNd()), 1 ); RedlineFlags eOld = getIDocumentRedlineAccess().GetRedlineFlags(); getIDocumentRedlineAccess().SetRedlineFlags_intern(RedlineFlags::NONE);