sc/source/filter/excel/tokstack.cxx |   19 ++++++++++++++-----
 sc/source/filter/inc/tokstack.hxx   |    5 +++--
 2 files changed, 17 insertions(+), 7 deletions(-)

New commits:
commit dc609320c7594d8c9378c3c06b94935b2572fbdb
Author: Markus Mohrhard <markus.mohrh...@googlemail.com>
Date:   Sun Mar 13 19:15:16 2016 +0100

    fix memory leak in array xls import
    
    The ScMatrix instances are leaked because there is no DecRef called on
    them when we Reset the TokenPool.
    
    Reviewed-on: https://gerrit.libreoffice.org/23194
    Reviewed-by: Kohei Yoshida <libreoff...@kohei.us>
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com>
    
    Conflicts:
        sc/source/filter/inc/tokstack.hxx
    
    Change-Id: Ie5e1a10c6be94b45df784c04f6db744928f213ff
    Reviewed-on: https://gerrit.libreoffice.org/23488
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Eike Rathke <er...@redhat.com>
    Tested-by: Eike Rathke <er...@redhat.com>

diff --git a/sc/source/filter/excel/tokstack.cxx 
b/sc/source/filter/excel/tokstack.cxx
index 1a8a399..b52b5ba 100644
--- a/sc/source/filter/excel/tokstack.cxx
+++ b/sc/source/filter/excel/tokstack.cxx
@@ -126,11 +126,7 @@ TokenPool::~TokenPool()
         delete ppP_Nlf[ n ];
     delete[] ppP_Nlf;
 
-    for( n = 0 ; n < nP_Matrix ; n++ )
-    {
-        if( ppP_Matrix[ n ] )
-            ppP_Matrix[ n ]->DecRef( );
-    }
+    ClearMatrix();
     delete[] ppP_Matrix;
 
     delete pScToken;
@@ -881,6 +877,7 @@ void TokenPool::Reset()
     maExtNames.clear();
     maExtCellRefs.clear();
     maExtAreaRefs.clear();
+    ClearMatrix();
 }
 
 bool TokenPool::IsSingleOp( const TokenId& rId, const DefTokenId eId ) const
@@ -936,4 +933,16 @@ ScMatrix* TokenPool::GetMatrix( unsigned int n ) const
     return nullptr;
 }
 
+void TokenPool::ClearMatrix()
+{
+    for(sal_uInt16 n = 0 ; n < nP_Matrix ; n++ )
+    {
+        if( ppP_Matrix[ n ] )
+        {
+            ppP_Matrix[ n ]->DecRef( );
+            ppP_Matrix[n] = nullptr;
+        }
+    }
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/inc/tokstack.hxx 
b/sc/source/filter/inc/tokstack.hxx
index b103179..5b91bfb 100644
--- a/sc/source/filter/inc/tokstack.hxx
+++ b/sc/source/filter/inc/tokstack.hxx
@@ -187,8 +187,9 @@ private:
         bool                        GrowExt();
         bool                        GrowNlf();
         bool                        GrowMatrix();
-               bool                                            GetElement( 
const sal_uInt16 nId );
-               bool                                            GetElementRek( 
const sal_uInt16 nId );
+        bool                        GetElement( const sal_uInt16 nId );
+        bool                        GetElementRek( const sal_uInt16 nId );
+        void                        ClearMatrix();
 public:
     TokenPool( svl::SharedStringPool& rSPool );
                                     ~TokenPool();
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to