From 3f7a0f7dba759ed3763c900112b5eeb7ccfdd84d Mon Sep 17 00:00:00 2001 From: Xisco Fauli Date: Thu, 4 Feb 2016 22:50:47 +0100 Subject: tdf#97429: Fix crash on print selected area MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Regression from 9eb61489ee03486a7147acdf923eaf5e3f355183 Use DelFlyInRange to iterate over nodes' range Change-Id: I219c7ec83eaa69990340d423dc34546131bb372c Reviewed-on: https://gerrit.libreoffice.org/22129 Tested-by: Jenkins Reviewed-by: Xisco FaulĂ­ --- sw/source/core/frmedt/fecopy.cxx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/sw/source/core/frmedt/fecopy.cxx b/sw/source/core/frmedt/fecopy.cxx index b40a0bfd5899..dc7939dfbdde 100644 --- a/sw/source/core/frmedt/fecopy.cxx +++ b/sw/source/core/frmedt/fecopy.cxx @@ -90,6 +90,7 @@ bool SwFEShell::Copy( SwDoc* pClpDoc, const OUString* pNewClpText ) // delete content if ClpDocument contains content SwNodeIndex aSttIdx( pClpDoc->GetNodes().GetEndOfExtras(), 2 ); + SwNodeIndex aEndNdIdx( *aSttIdx.GetNode().EndOfSectionNode() ); SwTextNode* pTextNd = aSttIdx.GetNode().GetTextNode(); if (!pTextNd || !pTextNd->GetText().isEmpty() || aSttIdx.GetIndex()+1 != pClpDoc->GetNodes().GetEndOfContent().GetIndex() ) @@ -102,11 +103,19 @@ bool SwFEShell::Copy( SwDoc* pClpDoc, const OUString* pNewClpText ) } // also delete surrounding FlyFrames if any - for( auto pFormat : *pClpDoc->GetSpzFrameFormats() ) + for( const auto pFly : *pClpDoc->GetSpzFrameFormats() ) { - SwFlyFrameFormat* pFly = static_cast(pFormat); - pClpDoc->getIDocumentLayoutAccess().DelLayoutFormat( pFly ); + SwFormatAnchor const*const pAnchor = &pFly->GetAnchor(); + SwPosition const*const pAPos = pAnchor->GetContentAnchor(); + if (pAPos && + ((FLY_AT_PARA == pAnchor->GetAnchorId()) || + (FLY_AT_CHAR == pAnchor->GetAnchorId())) && + aSttIdx <= pAPos->nNode && pAPos->nNode <= aEndNdIdx ) + { + pClpDoc->getIDocumentLayoutAccess().DelLayoutFormat( pFly ); + } } + pClpDoc->GetDocumentFieldsManager().GCFieldTypes(); // delete the FieldTypes // if a string was passed, copy it to the clipboard- -- cgit v1.2.3