Blob Blame History Raw
From 640e8abbff03f7f242c0c0b9d73ffd2eda3c4e35 Mon Sep 17 00:00:00 2001
From: Michael Stahl <mstahl@redhat.com>
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 <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
---
 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