From 640e8abbff03f7f242c0c0b9d73ffd2eda3c4e35 Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Thu, 5 Dec 2013 21:58:11 +0100 Subject: [PATCH 042/109] fdo#71892: sw: fix crash when pasting table in footnote MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) (cherry picked from commit 4580094d2d9d5b952c4526ee23204f75a5bb2f1b) Conflicts: sw/source/core/frmedt/fecopy.cxx (cherry picked from commit 2171fff4c1a57ede8f9693d7c0d95c1171a49a70) Change-Id: I77b5b7751d1036a6401f708532537d874969502e Reviewed-on: https://gerrit.libreoffice.org/6951 Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- sw/source/core/frmedt/fecopy.cxx | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/sw/source/core/frmedt/fecopy.cxx b/sw/source/core/frmedt/fecopy.cxx index 3fa4a73..6c503dc 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. - { - xub_StrLen nNodesCnt = aCpyPam.End()->nNode.GetIndex() - aCpyPam.Start()->nNode.GetIndex(); + // Update the rsid of each pasted text node. SwNodes &rDestNodes = GetDoc()->GetNodes(); - xub_StrLen nDestStart = PCURCRSR->GetPoint()->nNode.GetIndex() - nNodesCnt; + sal_uLong const nEndIdx = aPaM.End()->nNode.GetIndex(); - for ( sal_uInt64 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 ); -- 1.8.4.2