diff options
author | Michael Stahl <mstahl@redhat.com> | 2013-12-05 21:58:11 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2013-12-05 23:25:37 +0100 |
commit | 4580094d2d9d5b952c4526ee23204f75a5bb2f1b (patch) | |
tree | 0885585a529382ebade3eb410e492f83b2fbeb55 | |
parent | 7e491281d2ba71490fa22cce1e43ba91f60395e3 (diff) |
fdo#71892: sw: fix crash when pasting table in footnote
The code that updates RSIDs assumes that the number of nodes copied is
the same as the number of nodes inserted, which is not true when pasting
a table into a footnote because Writer can't do that, hence all table
nodes are missing. Count inserted nodes instead.
(regression from 062eaeffe7cb986255063bb9b0a5f3fb3fc8e34c)
Change-Id: I77b5b7751d1036a6401f708532537d874969502e
-rw-r--r-- | sw/source/core/frmedt/fecopy.cxx | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/sw/source/core/frmedt/fecopy.cxx b/sw/source/core/frmedt/fecopy.cxx index 0b93a963894b..af1dc822f312 100644 --- a/sw/source/core/frmedt/fecopy.cxx +++ b/sw/source/core/frmedt/fecopy.cxx @@ -1039,25 +1039,22 @@ sal_Bool SwFEShell::Paste( SwDoc* pClpDoc, sal_Bool bIncludingPageFrames ) aIndexBefore--; pClpDoc->CopyRange( aCpyPam, rInsPos, false ); + // Note: aCpyPam is invalid now - { - ++aIndexBefore; - SwPaM aPaM(SwPosition(aIndexBefore), - SwPosition(rInsPos.nNode)); + ++aIndexBefore; + SwPaM aPaM(SwPosition(aIndexBefore), + SwPosition(rInsPos.nNode)); - aPaM.GetDoc()->MakeUniqueNumRules(aPaM); - } - } + aPaM.GetDoc()->MakeUniqueNumRules(aPaM); - // Update the rsid of each pasted text node. - { - sal_Int32 nNodesCnt = aCpyPam.End()->nNode.GetIndex() - aCpyPam.Start()->nNode.GetIndex(); + // Update the rsid of each pasted text node. SwNodes &rDestNodes = GetDoc()->GetNodes(); - sal_Int32 nDestStart = PCURCRSR->GetPoint()->nNode.GetIndex() - nNodesCnt; + sal_uLong const nEndIdx = aPaM.End()->nNode.GetIndex(); - for (sal_Int32 nIdx = 0; nIdx <= nNodesCnt; ++nIdx) + for (sal_uLong nIdx = aPaM.Start()->nNode.GetIndex(); + nIdx <= nEndIdx; ++nIdx) { - SwTxtNode *pTxtNode = rDestNodes[ nDestStart + nIdx ]->GetTxtNode(); + SwTxtNode *const pTxtNode = rDestNodes[nIdx]->GetTxtNode(); if ( pTxtNode ) { GetDoc()->UpdateParRsid( pTxtNode ); |