summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorDennis Francis <dennisfrancis.in@gmail.com>2015-11-30 04:44:43 +0530
committerCaolán McNamara <caolanm@redhat.com>2015-12-01 09:13:05 +0000
commit75c956d8ed1a4d8f46af3de079ab1fb68add3b40 (patch)
tree94c3e4e78233d9260f77bafeb3b3d9870e1c462a /sc
parent796a904b6f3cfd7895e1763fdb043130a9c484ac (diff)
fix memory leaks on loading and saving an ods file
Change-Id: I3015a0f0254b9546386871cb015f925f0cd792f3 Reviewed-on: https://gerrit.libreoffice.org/20274 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/textuno.hxx8
-rw-r--r--sc/source/filter/xml/XMLTableHeaderFooterContext.cxx3
-rw-r--r--sc/source/filter/xml/XMLTableMasterPageExport.cxx15
-rw-r--r--sc/source/ui/unoobj/textuno.cxx7
4 files changed, 32 insertions, 1 deletions
diff --git a/sc/inc/textuno.hxx b/sc/inc/textuno.hxx
index 9a641572d4ff..defb6d656abd 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 ba0e16e98104..2ba8ed048153 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 260deea6dffe..f9e42add00bd 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 736e96140b3f..1ea1215b1859 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),