summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <michael.stahl@allotropia.de>2022-05-20 15:46:20 +0200
committerCaolán McNamara <caolanm@redhat.com>2022-05-24 09:58:39 +0200
commit9b7670155553115b967bb2a9215a4ee49f7b0ef2 (patch)
tree22aec88913e1f7e310d2abf1c19b45eaae3b48bf
parent4dcc03681395a894adb0179045fc4be2339a1f10 (diff)
sw_redlinehide: fix crash in IsMarkHidden() if pointing to table node
This is called during mail merge from documentStartPageNumber() and if the document starts with a table, the passed UNO mark will point to SwTableNode. (regression from commit 943d9be770e550d20ca72274fa5e914d1f61e605) Change-Id: Ic69c12ba0d819eda85de5dde95e35a8071466c2e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134692 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de> (cherry picked from commit 4d3b750d08d05c475fb38f8b3961696d9cc9882f) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134776 Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--sw/source/core/crsr/crbm.cxx15
1 files changed, 10 insertions, 5 deletions
diff --git a/sw/source/core/crsr/crbm.cxx b/sw/source/core/crsr/crbm.cxx
index 9e2027a2ceba..02f554014568 100644
--- a/sw/source/core/crsr/crbm.cxx
+++ b/sw/source/core/crsr/crbm.cxx
@@ -128,9 +128,14 @@ bool IsMarkHidden(SwRootFrame const& rLayout, ::sw::mark::IMark const& rMark)
{
return false;
}
- SwTextNode const& rNode(*rMark.GetMarkPos().nNode.GetNode().GetTextNode());
+ SwNode const& rNode(rMark.GetMarkPos().nNode.GetNode());
+ SwTextNode const*const pTextNode(rNode.GetTextNode());
+ if (pTextNode == nullptr)
+ { // UNO_BOOKMARK may point to table node
+ return rNode.GetRedlineMergeFlag() == SwNode::Merge::Hidden;
+ }
SwTextFrame const*const pFrame(static_cast<SwTextFrame const*>(
- rNode.getLayoutFrame(&rLayout)));
+ pTextNode->getLayoutFrame(&rLayout)));
if (!pFrame)
{
return true;
@@ -145,14 +150,14 @@ bool IsMarkHidden(SwRootFrame const& rLayout, ::sw::mark::IMark const& rMark)
}
else
{
- if (rMark.GetMarkPos().nContent.GetIndex() == rNode.Len())
+ if (rMark.GetMarkPos().nContent.GetIndex() == pTextNode->Len())
{ // at end of node: never deleted (except if node deleted)
- return rNode.GetRedlineMergeFlag() == SwNode::Merge::Hidden;
+ return pTextNode->GetRedlineMergeFlag() == SwNode::Merge::Hidden;
}
else
{ // check character following mark pos
return pFrame->MapModelToViewPos(rMark.GetMarkPos())
- == pFrame->MapModelToView(&rNode, rMark.GetMarkPos().nContent.GetIndex() + 1);
+ == pFrame->MapModelToView(pTextNode, rMark.GetMarkPos().nContent.GetIndex() + 1);
}
}
}