[Libreoffice-commits] core.git: sw/source

Stephan Bergmann sbergman at redhat.com
Tue Aug 13 09:16:44 PDT 2013


 sw/source/core/docnode/nodes.cxx |   12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

New commits:
commit ebc81f19ef4ffe8d54f83c019ea80d10c98647d7
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Aug 13 18:13:49 2013 +0200

    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

diff --git a/sw/source/core/docnode/nodes.cxx b/sw/source/core/docnode/nodes.cxx
index 61c3098..4c02bf0 100644
--- a/sw/source/core/docnode/nodes.cxx
+++ b/sw/source/core/docnode/nodes.cxx
@@ -2323,11 +2323,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 )
 {
@@ -2371,6 +2374,7 @@ void SwNodes::RemoveNode( sal_uLong nDelPos, sal_uLong nSz, sal_Bool bDel )
         }
     }
 
+    std::vector<TempBigPtrEntry> aTempEntries;
     if( bDel )
     {
         sal_uLong nCnt = nSz;
@@ -2383,14 +2387,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 ];


More information about the Libreoffice-commits mailing list