diff options
author | Michael Stahl <mstahl@redhat.com> | 2011-11-18 13:59:49 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2011-11-18 22:24:19 +0100 |
commit | 72318173b6d2f6f62e15909dcc121e85872c0ef1 (patch) | |
tree | e824ce77234c6294ecd62687dda1c55f877a73c8 /sw | |
parent | 0fbd0bbfecda7b0a4642c2cbe8ea80027265192d (diff) |
SwUndoReplace::Impl::UndoImpl: prevent assertion:
unregister SwIndex local variable from node to be deleted
Diffstat (limited to 'sw')
-rw-r--r-- | sw/source/core/undo/unins.cxx | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sw/source/core/undo/unins.cxx b/sw/source/core/undo/unins.cxx index d845c484261b..b4d60633c99d 100644 --- a/sw/source/core/undo/unins.cxx +++ b/sw/source/core/undo/unins.cxx @@ -606,7 +606,7 @@ SwUndoReplace::Impl::Impl( m_bSplitNext = m_nSttNd != pEnd->nNode.GetIndex(); SwTxtNode* pNd = pStt->nNode.GetNode().GetTxtNode(); - OSL_ENSURE( pNd, "wo ist der TextNode" ); + OSL_ENSURE( pNd, "Dude, where's my TextNode?" ); pHistory = new SwHistory; DelCntntIndex( *rPam.GetMark(), *rPam.GetPoint() ); @@ -655,7 +655,7 @@ void SwUndoReplace::Impl::UndoImpl(::sw::UndoRedoContext & rContext) rPam.DeleteMark(); SwTxtNode* pNd = pDoc->GetNodes()[ m_nSttNd - m_nOffset ]->GetTxtNode(); - OSL_ENSURE( pNd, "Wo ist der TextNode geblieben?" ); + OSL_ENSURE( pNd, "Dude, where's my TextNode?" ); SwAutoCorrExceptWord* pACEWord = pDoc->GetAutoCorrExceptWord(); if( pACEWord ) @@ -668,7 +668,7 @@ void SwUndoReplace::Impl::UndoImpl(::sw::UndoRedoContext & rContext) pDoc->SetAutoCorrExceptWord( 0 ); } - SwIndex aIdx( pNd, sal_uInt16( m_nSttCnt ) ); + SwIndex aIdx( pNd, m_nSttCnt ); if( m_nSttNd == m_nEndNd ) { pNd->EraseText( aIdx, sal_uInt16( m_sIns.getLength() ) ); @@ -680,11 +680,13 @@ void SwUndoReplace::Impl::UndoImpl(::sw::UndoRedoContext & rContext) rPam.SetMark(); rPam.GetPoint()->nNode = m_nEndNd - m_nOffset; rPam.GetPoint()->nContent.Assign( rPam.GetCntntNode(), m_nEndCnt ); + // move it out of the way so it is not registered at deleted node + aIdx.Assign(0, 0); pDoc->DeleteAndJoin( rPam ); rPam.DeleteMark(); pNd = rPam.GetNode()->GetTxtNode(); - OSL_ENSURE( pNd, "Wo ist der TextNode geblieben?" ); + OSL_ENSURE( pNd, "Dude, where's my TextNode?" ); aIdx.Assign( pNd, m_nSttCnt ); } @@ -741,7 +743,7 @@ void SwUndoReplace::Impl::RedoImpl(::sw::UndoRedoContext & rContext) rPam.GetPoint()->nNode = m_nSttNd; SwTxtNode* pNd = rPam.GetPoint()->nNode.GetNode().GetTxtNode(); - OSL_ENSURE( pNd, "Wo ist der TextNode geblieben?" ); + OSL_ENSURE( pNd, "Dude, where's my TextNode?" ); rPam.GetPoint()->nContent.Assign( pNd, m_nSttCnt ); rPam.SetMark(); if( m_bSplitNext ) |