[Libreoffice-commits] core.git: sc/inc sc/source

Dennis Francis dennisfrancis.in at gmail.com
Tue Dec 1 01:13:25 PST 2015


 sc/inc/textuno.hxx                                   |    8 +++++++-
 sc/source/filter/xml/XMLTableHeaderFooterContext.cxx |    3 +++
 sc/source/filter/xml/XMLTableMasterPageExport.cxx    |   15 +++++++++++++++
 sc/source/ui/unoobj/textuno.cxx                      |    7 +++++++
 4 files changed, 32 insertions(+), 1 deletion(-)

New commits:
commit 75c956d8ed1a4d8f46af3de079ab1fb68add3b40
Author: Dennis Francis <dennisfrancis.in at gmail.com>
Date:   Mon Nov 30 04:44:43 2015 +0530

    fix memory leaks on loading and saving an ods file
    
    Change-Id: I3015a0f0254b9546386871cb015f925f0cd792f3
    Reviewed-on: https://gerrit.libreoffice.org/20274
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sc/inc/textuno.hxx b/sc/inc/textuno.hxx
index 9a64157..defb6d6 100644
--- a/sc/inc/textuno.hxx
+++ b/sc/inc/textuno.hxx
@@ -102,6 +102,8 @@ public:
                                 throw(css::uno::RuntimeException, std::exception) override;
     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames()
                                 throw(css::uno::RuntimeException, std::exception) override;
+
+    virtual void dispose();
 };
 
 //  ScHeaderFooterTextData: shared data between sub objects of a ScHeaderFooterTextObj
@@ -130,7 +132,9 @@ public:
     sal_uInt16                  GetPart() const         { return nPart; }
     rtl::Reference<ScHeaderFooterContentObj> GetContentObj() const { return rContentObj; }
 
-    const EditTextObject* GetTextObject() const { return mpTextObj;}
+    const EditTextObject* GetTextObject() const { return mpTextObj; }
+
+    void dispose() { rContentObj.clear(); }
 };
 
 /**
@@ -224,6 +228,8 @@ public:
                                 throw(css::uno::RuntimeException, std::exception) override;
     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames()
                                 throw(css::uno::RuntimeException, std::exception) override;
+
+    virtual void dispose() { aTextData.dispose(); }
 };
 
 //  derived cursor objects for getImplementation and getText/getStart/getEnd
diff --git a/sc/source/filter/xml/XMLTableHeaderFooterContext.cxx b/sc/source/filter/xml/XMLTableHeaderFooterContext.cxx
index ba0e16e..2ba8ed0 100644
--- a/sc/source/filter/xml/XMLTableHeaderFooterContext.cxx
+++ b/sc/source/filter/xml/XMLTableHeaderFooterContext.cxx
@@ -25,6 +25,7 @@
 #include <comphelper/extract.hxx>
 
 #include "unonames.hxx"
+#include "textuno.hxx"
 
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
@@ -99,6 +100,8 @@ XMLTableHeaderFooterContext::XMLTableHeaderFooterContext( SvXMLImport& rImport,
 
 XMLTableHeaderFooterContext::~XMLTableHeaderFooterContext()
 {
+    rtl::Reference<ScHeaderFooterContentObj> pImp = ScHeaderFooterContentObj::getImplementation( xHeaderFooterContent );
+    pImp->dispose();
 }
 
 SvXMLImportContext *XMLTableHeaderFooterContext::CreateChildContext(
diff --git a/sc/source/filter/xml/XMLTableMasterPageExport.cxx b/sc/source/filter/xml/XMLTableMasterPageExport.cxx
index 260deea..f9e42ad 100644
--- a/sc/source/filter/xml/XMLTableMasterPageExport.cxx
+++ b/sc/source/filter/xml/XMLTableMasterPageExport.cxx
@@ -23,9 +23,11 @@
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include "XMLTableMasterPageExport.hxx"
 #include <comphelper/extract.hxx>
+#include <rtl/ref.hxx>
 
 #include "unonames.hxx"
 #include "xmlexprt.hxx"
+#include "textuno.hxx"
 
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
@@ -105,6 +107,14 @@ void XMLTableMasterPageExport::exportHeaderFooter(const css::uno::Reference < cs
     }
 }
 
+void lcl_DisposeXHeaderFooterContent( Reference < sheet::XHeaderFooterContent > xHFContent )
+{
+    if( !xHFContent.is() )
+        return;
+    rtl::Reference<ScHeaderFooterContentObj> pImp = ScHeaderFooterContentObj::getImplementation( xHFContent );
+    pImp->dispose();
+}
+
 void XMLTableMasterPageExport::exportMasterPageContent(
                 const Reference < XPropertySet > & rPropSet,
                 bool bAutoStyles )
@@ -162,6 +172,11 @@ void XMLTableMasterPageExport::exportMasterPageContent(
 
         exportHeaderFooter( xFooterLeft, XML_FOOTER_LEFT, bLeftFooter );
     }
+
+    lcl_DisposeXHeaderFooterContent( xHeader );
+    lcl_DisposeXHeaderFooterContent( xHeaderLeft );
+    lcl_DisposeXHeaderFooterContent( xFooter );
+    lcl_DisposeXHeaderFooterContent( xFooterLeft );
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/unoobj/textuno.cxx b/sc/source/ui/unoobj/textuno.cxx
index 736e961..1ea1215 100644
--- a/sc/source/ui/unoobj/textuno.cxx
+++ b/sc/source/ui/unoobj/textuno.cxx
@@ -174,6 +174,13 @@ rtl::Reference<ScHeaderFooterContentObj> ScHeaderFooterContentObj::getImplementa
     return pRet;
 }
 
+void ScHeaderFooterContentObj::dispose()
+{
+    mxLeftText->dispose();
+    mxCenterText->dispose();
+    mxRightText->dispose();
+}
+
 ScHeaderFooterTextData::ScHeaderFooterTextData(
     rtl::Reference<ScHeaderFooterContentObj> const & rContent, sal_uInt16 nP, const EditTextObject* pTextObj) :
     mpTextObj(pTextObj ? pTextObj->Clone() : nullptr),


More information about the Libreoffice-commits mailing list