[Libreoffice-commits] core.git: 3 commits - sfx2/source svtools/source svx/source

Caolán McNamara caolanm at redhat.com
Fri May 16 13:05:33 PDT 2014


 sfx2/source/doc/sfxbasemodel.cxx           |   12 +++---------
 svtools/source/graphic/grfcache.cxx        |    2 +-
 svx/source/sdr/properties/itemsettools.cxx |    1 +
 3 files changed, 5 insertions(+), 10 deletions(-)

New commits:
commit 5b2f1b46b129c41890c54513c6d386407db6718a
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri May 16 20:50:24 2014 +0100

    strangely obvious leaky code
    
    Change-Id: I968cbb784d53e0cff0649061c58f752939226a09

diff --git a/svx/source/sdr/properties/itemsettools.cxx b/svx/source/sdr/properties/itemsettools.cxx
index ce937b3..2879b48 100644
--- a/svx/source/sdr/properties/itemsettools.cxx
+++ b/svx/source/sdr/properties/itemsettools.cxx
@@ -120,6 +120,7 @@ namespace sdr
                         SfxPoolItem* pNewItem = pItem->Clone();
                         pNewItem->ScaleMetrics(nMul, nDiv);
                         rSet.Put(*pNewItem);
+                        delete pNewItem;
                     }
                 }
                 nWhich = aIter.NextWhich();
commit fdca15fb864aca975533257d5ee83440992d8a7e
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri May 16 16:36:13 2014 +0100

    valgrind: SfxBaseModel's pImpl of fallback TargetDocument for paste leaks
    
    e.g. repeatedly pasting a metafile into writer and deleting it.
    
    ==13369== 342 (232 direct, 110 indirect) bytes in 1 blocks are definitely lost in loss record 19,396 of 22,170
    ==13369==    at 0x4A06965: operator new(unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==13369==    by 0x686D72E: SfxBaseModel::SfxBaseModel(SfxObjectShell*) (sfxbasemodel.cxx:518)
    ==13369==    by 0x288CA9C1: SvxUnoDrawingModel::SvxUnoDrawingModel(SdrModel*) (unomod.cxx:255)
    ==13369==    by 0x28961055: SvxDrawingLayerImport(SdrModel*, com::sun::star::uno::Reference<com::sun::star::io::XInputStream> const&, com::sun::star::uno::Reference<com::sun::star::lang::XComponent> const&, char const*) (xmlexport.cxx:164)
    ==13369==    by 0x28960FA2: SvxDrawingLayerImport(SdrModel*, com::sun::star::uno::Reference<com::sun::star::io::XInputStream> const&, com::sun::star::uno::Reference<com::sun::star::lang::XComponent> const&) (xmlexport.cxx:148)
    ==13369==    by 0x2896175E: SvxDrawingLayerImport(SdrModel*, com::sun::star::uno::Reference<com::sun::star::io::XInputStream> const&) (xmlexport.cxx:254)
    ==13369==    by 0x240B1002: SwFEShell::Paste(SvStream&, unsigned short, Point const*) (fecopy.cxx:1333)
    ==13369==    by 0x247B981A: SwTransferable::_PasteSdrFormat(TransferableDataHelper&, SwWrtShell&, unsigned short, Point const*, unsigned char, bool) (swdtflvr.cxx:2207)
    ==13369==    by 0x247B678E: SwTransferable::PasteData(TransferableDataHelper&, SwWrtShell&, unsigned short, unsigned long, unsigned short, bool, bool, Point const*, signed char, bool) (swdtflvr.cxx:1481)
    ==13369==    by 0x247B5AE4: SwTransferable::Paste(SwWrtShell&, TransferableDataHelper&) (swdtflvr.cxx:1150)
    ==13369==    by 0x2488FCCE: SwBaseShell::ExecClpbrd(SfxRequest&) (basesh.cxx:277)
    
         Reference< lang::XComponent > xTargetDocument( xComponent );
         if( !xTargetDocument.is() )
         {
    >        xTargetDocument = new SvxUnoDrawingModel( pModel );
             pModel->setUnoModel( Reference< XInterface >::query( xTargetDocument ) );
         }
    
    Change-Id: I3bd0fc983d9b6bdcdc91071a4ec3d2c584397ebf

diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx
index 3ad6fc9..b50afe1 100644
--- a/sfx2/source/doc/sfxbasemodel.cxx
+++ b/sfx2/source/doc/sfxbasemodel.cxx
@@ -523,18 +523,15 @@ SfxBaseModel::SfxBaseModel( SfxObjectShell *pObjectShell )
     }
 }
 
-
 //  destructor
-
-
 SfxBaseModel::~SfxBaseModel()
 {
+    //In SvxDrawingLayerImport when !xTargetDocument the fallback SvxUnoDrawingModel created there
+    //never gets disposed called on it, so m_pData leaks.
+    delete m_pData, m_pData = 0;
 }
 
-
 //  XInterface
-
-
 Any SAL_CALL SfxBaseModel::queryInterface( const uno::Type& rType ) throw( RuntimeException, std::exception )
 {
     if  (   ( !m_bSupportEmbeddedScripts && rType.equals( cppu::UnoType<document::XEmbeddedScripts>::get() ) )
@@ -545,10 +542,7 @@ Any SAL_CALL SfxBaseModel::queryInterface( const uno::Type& rType ) throw( Runti
     return SfxBaseModel_Base::queryInterface( rType );
 }
 
-
 //  XInterface
-
-
 void SAL_CALL SfxBaseModel::acquire() throw( )
 {
     // Attention:
commit 7d6e159df4c28afde2fff5bd734ec3a8f63cb15a
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri May 16 16:06:10 2014 +0100

    fix memory leak on pasting metafiles into writer
    
    copying from mspaint to writer and then deleting the image in a loop will
    eventually exhaust all memory.
    
    regression since 004a29b9ac66f68af5ea12a2303a4b2be77d8145
    
    Change-Id: I381285cda3823de7df0c1725a339943caf9536fe

diff --git a/svtools/source/graphic/grfcache.cxx b/svtools/source/graphic/grfcache.cxx
index 26d766a..72fdc3a 100644
--- a/svtools/source/graphic/grfcache.cxx
+++ b/svtools/source/graphic/grfcache.cxx
@@ -367,7 +367,7 @@ void GraphicCacheEntry::GraphicObjectWasSwappedOut( const GraphicObject& /*rObj*
     if( mbSwappedAll )
     {
         delete mpBmpEx, mpBmpEx = NULL;
-        mpMtf = NULL; // No need to delete it as it has already been dereferenced
+        delete mpMtf, mpMtf = NULL;
         delete mpAnimation, mpAnimation = NULL;
 
         // #119176# also reset SvgData


More information about the Libreoffice-commits mailing list