summaryrefslogtreecommitdiff
path: root/filter
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2021-05-21 13:47:28 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-05-21 17:35:56 +0200
commit185f3e3c382e93be4e0588ac8a927ea3140bce91 (patch)
tree46fb69304560b1a9da93f76b474857d17ad54511 /filter
parentde4c23fb38a7848e1030075b9c15cbb5c558694c (diff)
fix leak in XSLTFilter
Change-Id: Icae17e964df944391fddb47e4b0758ca89e299eb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115917 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'filter')
-rw-r--r--filter/source/xsltfilter/XSLTFilter.cxx66
1 files changed, 37 insertions, 29 deletions
diff --git a/filter/source/xsltfilter/XSLTFilter.cxx b/filter/source/xsltfilter/XSLTFilter.cxx
index 1e3f770c2aee..f98b83b73c48 100644
--- a/filter/source/xsltfilter/XSLTFilter.cxx
+++ b/filter/source/xsltfilter/XSLTFilter.cxx
@@ -87,6 +87,27 @@ namespace XSLT
{
namespace {
+ class XSLTFilter;
+ class XSLTFilterStreamListener : public WeakImplHelper<XStreamListener>
+ {
+ public:
+ XSLTFilterStreamListener(XSLTFilter& rParent) : m_rParent(rParent) {}
+
+ // XStreamListener
+ virtual void SAL_CALL
+ error(const Any& a) override;
+ virtual void SAL_CALL
+ closed() override;
+ virtual void SAL_CALL
+ terminated() override;
+ virtual void SAL_CALL
+ started() override;
+ virtual void SAL_CALL
+ disposing(const EventObject& e) override;
+ private:
+ XSLTFilter& m_rParent;
+ };
+
/*
* XSLTFilter reads flat XML streams from the XML filter framework and passes
* them to an XSLT transformation service. XSLT transformation errors are
@@ -98,8 +119,9 @@ namespace XSLT
* service must support com.sun.star.xml.xslt.XSLT2Transformer.
*/
class XSLTFilter : public WeakImplHelper<XImportFilter, XImportFilter2, XExportFilter,
- XStreamListener, ExtendedDocumentHandlerAdapter, XServiceInfo>
+ ExtendedDocumentHandlerAdapter, XServiceInfo>
{
+ friend class XSLTFilterStreamListener;
private:
// the UNO ServiceFactory
@@ -133,18 +155,6 @@ namespace XSLT
virtual OUString SAL_CALL getImplementationName() override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
- // XStreamListener
- virtual void SAL_CALL
- error(const Any& a) override;
- virtual void SAL_CALL
- closed() override;
- virtual void SAL_CALL
- terminated() override;
- virtual void SAL_CALL
- started() override;
- virtual void SAL_CALL
- disposing(const EventObject& e) override;
-
// XImportFilter
virtual sal_Bool SAL_CALL
importer(const Sequence<PropertyValue>& aSourceData, const css::uno::Reference<
@@ -176,7 +186,7 @@ namespace XSLT
{}
void
- XSLTFilter::disposing(const EventObject&)
+ XSLTFilterStreamListener::disposing(const EventObject&)
{
}
@@ -249,27 +259,27 @@ namespace XSLT
}
void
- XSLTFilter::started()
+ XSLTFilterStreamListener::started()
{
- m_cTransformed.reset();
+ m_rParent.m_cTransformed.reset();
}
void
- XSLTFilter::error(const Any& a)
+ XSLTFilterStreamListener::error(const Any& a)
{
SAL_WARN("filter.xslt", "XSLTFilter::error was called: " << exceptionToString(a));
- m_bError = true;
- m_cTransformed.set();
+ m_rParent.m_bError = true;
+ m_rParent.m_cTransformed.set();
}
void
- XSLTFilter::closed()
+ XSLTFilterStreamListener::closed()
{
- m_cTransformed.set();
+ m_rParent.m_cTransformed.set();
}
void
- XSLTFilter::terminated()
+ XSLTFilterStreamListener::terminated()
{
- m_bTerminated = true;
- m_cTransformed.set();
+ m_rParent.m_bTerminated = true;
+ m_rParent.m_cTransformed.set();
}
OUString
@@ -348,8 +358,7 @@ namespace XSLT
xSeek->seek(0);
// we want to be notified when the processing is done...
- m_tcontrol->addListener(css::uno::Reference<XStreamListener> (
- this));
+ m_tcontrol->addListener(new XSLTFilterStreamListener(*this));
// connect input to transformer
m_tcontrol->setInputStream(xInputStream);
@@ -489,8 +498,7 @@ namespace XSLT
xSeek->seek(0);
// we want to be notified when the processing is done...
- m_tcontrol->addListener(css::uno::Reference<XStreamListener> (
- this));
+ m_tcontrol->addListener(new XSLTFilterStreamListener(*this));
// connect input to transformer
m_tcontrol->setInputStream(xInputStream);
@@ -618,7 +626,7 @@ namespace XSLT
if (m_tcontrol.is() && m_rOutputStream.is())
{
// we want to be notified when the processing is done...
- m_tcontrol->addListener(css::uno::Reference<XStreamListener> (this));
+ m_tcontrol->addListener(new XSLTFilterStreamListener(*this));
// create pipe
css::uno::Reference<XOutputStream> pipeout =