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

Reply via email to