summaryrefslogtreecommitdiff
path: root/sw/source/core/txtnode/ndtxt.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/txtnode/ndtxt.cxx')
-rw-r--r--sw/source/core/txtnode/ndtxt.cxx9
1 files changed, 5 insertions, 4 deletions
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index a979650504e1..ce948ec68c3c 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -2018,7 +2018,7 @@ void SwTextNode::CopyText( SwTextNode *const pDest,
{
CHECK_SWPHINTS_IF_FRM(this);
CHECK_SWPHINTS(pDest);
- sal_Int32 nTextStartIdx = rStart.GetIndex();
+ const sal_Int32 nTextStartIdx = rStart.GetIndex();
sal_Int32 nDestStart = rDestStart.GetIndex(); // remember old Pos
if (pDest->GetDoc()->IsClipBoard() && GetNum())
@@ -2109,7 +2109,6 @@ void SwTextNode::CopyText( SwTextNode *const pDest,
// Fetch end only now, because copying into self updates the start index
// and all attributes
- nTextStartIdx = rStart.GetIndex();
const sal_Int32 nEnd = nTextStartIdx + nLen;
// 2. copy attributes
@@ -2257,8 +2256,10 @@ void SwTextNode::CopyText( SwTextNode *const pDest,
std::reverse(metaFieldRanges.begin(), metaFieldRanges.end());
for (const auto& pair : metaFieldRanges)
{
- const SwIndex aIdx(pDest, pair.first);
- pDest->EraseText(aIdx, pair.second - pair.first);
+ const SwIndex aIdx(pDest, std::max<sal_Int32>(pair.first - nTextStartIdx, 0));
+ const sal_Int32 nCount = pair.second - pair.first;
+ if (nCount > 0)
+ pDest->EraseText(aIdx, nCount);
}
}