summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2011-11-18 13:59:49 +0100
committerMichael Stahl <mstahl@redhat.com>2011-11-18 22:24:19 +0100
commit72318173b6d2f6f62e15909dcc121e85872c0ef1 (patch)
treee824ce77234c6294ecd62687dda1c55f877a73c8
parent0fbd0bbfecda7b0a4642c2cbe8ea80027265192d (diff)
SwUndoReplace::Impl::UndoImpl: prevent assertion:
unregister SwIndex local variable from node to be deleted
-rw-r--r--sw/source/core/undo/unins.cxx12
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 )