diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2013-08-13 18:13:49 +0200 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-08-14 09:03:57 +0000 |
commit | 8bf69e2abf94b94afedeb0b7d7644e5626954122 (patch) | |
tree | 4a4c0495e7209918c641ef67f44a19b552859892 | |
parent | 3a7a2012e16a3f5bcb9be42c4e3a78718216c862 (diff) |
fdo#68064: Do not insert aTempEntry multiple times
...and do not let it go out of scope before being used in BigPtrArray::Remove.
(And, en passant, avoid use of reserved identifier, starting with an underscore
followed by a capital letter.)
Change-Id: Ic5730f707601a2070f2eed3ba017650026657df3
(cherry picked from commit ebc81f19ef4ffe8d54f83c019ea80d10c98647d7)
Reviewed-on: https://gerrit.libreoffice.org/5407
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | sw/source/core/docnode/nodes.cxx | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/sw/source/core/docnode/nodes.cxx b/sw/source/core/docnode/nodes.cxx index 49ea80ad0660..1b3dda44c8bd 100644 --- a/sw/source/core/docnode/nodes.cxx +++ b/sw/source/core/docnode/nodes.cxx @@ -2332,11 +2332,14 @@ void SwNodes::ForEach( const SwNodeIndex& rStart, const SwNodeIndex& rEnd, (FnForEach) fnForEach, pArgs ); } -struct _TempBigPtrEntry : public BigPtrEntry +namespace { + +struct TempBigPtrEntry : public BigPtrEntry { - _TempBigPtrEntry() {} + TempBigPtrEntry() {} }; +} void SwNodes::RemoveNode( sal_uLong nDelPos, sal_uLong nSz, sal_Bool bDel ) { @@ -2380,6 +2383,7 @@ void SwNodes::RemoveNode( sal_uLong nDelPos, sal_uLong nSz, sal_Bool bDel ) } } + std::vector<TempBigPtrEntry> aTempEntries; if( bDel ) { sal_uLong nCnt = nSz; @@ -2392,14 +2396,14 @@ void SwNodes::RemoveNode( sal_uLong nDelPos, sal_uLong nSz, sal_Bool bDel ) // ablaueft, wird hier ein temp. Objekt eingefuegt, das // dann mit dem Remove wieder entfernt wird. // siehe Bug 55406 - _TempBigPtrEntry aTempEntry; - BigPtrEntry* pTempEntry = &aTempEntry; + aTempEntries.resize(nCnt); while( nCnt-- ) { delete pDel; pDel = pPrev; sal_uLong nPrevNdIdx = pPrev->GetIndex(); + BigPtrEntry* pTempEntry = &aTempEntries[nCnt]; BigPtrArray::Replace( nPrevNdIdx+1, pTempEntry ); if( nCnt ) pPrev = (*this)[ nPrevNdIdx - 1 ]; |