summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
Diffstat (limited to 'sw')
-rw-r--r--sw/qa/extras/uiwriter/data2/tdf132160.odtbin0 -> 9501 bytes
-rw-r--r--sw/qa/extras/uiwriter/uiwriter2.cxx18
-rw-r--r--sw/source/core/doc/DocumentRedlineManager.cxx5
3 files changed, 23 insertions, 0 deletions
diff --git a/sw/qa/extras/uiwriter/data2/tdf132160.odt b/sw/qa/extras/uiwriter/data2/tdf132160.odt
new file mode 100644
index 000000000000..8a8ae7b8b1cb
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data2/tdf132160.odt
Binary files differ
diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx
index f93aba8f4e2a..8fb14a87c945 100644
--- a/sw/qa/extras/uiwriter/uiwriter2.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter2.cxx
@@ -1722,6 +1722,24 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf122942)
CPPUNIT_ASSERT(rOutRect2.Top() > rOutRect1.Top() && rOutRect2.Top() < rOutRect1.Bottom());
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf132160)
+{
+ load(DATA_DIRECTORY, "tdf132160.odt");
+
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+
+ // this would crash due to delete redline starting with ToX
+ dispatchCommand(mxComponent, ".uno:RejectAllTrackedChanges", {});
+
+ // this would crash due to insert redline ending on table node
+ dispatchCommand(mxComponent, ".uno:Undo", {});
+
+ dispatchCommand(mxComponent, ".uno:Redo", {});
+
+ dispatchCommand(mxComponent, ".uno:Undo", {});
+}
+
CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf52391)
{
load(DATA_DIRECTORY, "tdf52391.fodt");
diff --git a/sw/source/core/doc/DocumentRedlineManager.cxx b/sw/source/core/doc/DocumentRedlineManager.cxx
index 8b9eaf0179c6..bbf4e816616e 100644
--- a/sw/source/core/doc/DocumentRedlineManager.cxx
+++ b/sw/source/core/doc/DocumentRedlineManager.cxx
@@ -660,6 +660,11 @@ namespace
{
aPam.GetBound().nContent.Assign( nullptr, 0 );
aPam.GetBound( false ).nContent.Assign( nullptr, 0 );
+ if (aPam.End()->nNode.GetNode().IsStartNode())
+ { // end node will be deleted too! see nNodeDiff+1
+ --aPam.End()->nNode;
+ }
+ assert(!aPam.End()->nNode.GetNode().IsStartNode());
rDoc.getIDocumentContentOperations().DelFullPara( aPam );
}
else