summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2013-05-21 09:55:03 +0200
committerFridrich Strba <fridrich@documentfoundation.org>2013-05-21 09:41:32 +0000
commita6a8c379b20b4de7e8715057af4c1f6d020e55d2 (patch)
treeaa36759096647d9cd26a89e0a9668f33cd1bfb6e
parent3661c3eb0124d6f4799fe7c4393d4576e1613bfb (diff)
Fix two SfxFilterMatcher_Impl memory leaks.
First SfxFilterMatcher_Impl::InitForIterating() will set pList to either the global filter array matcher pFilterArr, or to a new SfxFilterList_Impl. This new SfxFilterList_Impl should be deleted in the destructor. Second getSfxFilterMatcher_Impl() keeps a cache of SfxFilterMatcher_Impls. If a SfxFilterMatcher_Impl for a given name doesn't exist yet a new one will be created. But the cache stored objects by service name (aName), but looked object up by factory name (rName). So it always created a new SfxFilterMatcher_Impl instead of using the one from the aImplArr cache. Change-Id: I7840aaddc861f609fbe14d5b6c0ea20d997f690f Reviewed-on: https://gerrit.libreoffice.org/3989 Reviewed-by: Fridrich Strba <fridrich@documentfoundation.org> Tested-by: Fridrich Strba <fridrich@documentfoundation.org>
-rw-r--r--sfx2/source/bastyp/fltfnc.cxx10
1 files changed, 9 insertions, 1 deletions
diff --git a/sfx2/source/bastyp/fltfnc.cxx b/sfx2/source/bastyp/fltfnc.cxx
index 8d9a70c744b3..42477d09916f 100644
--- a/sfx2/source/bastyp/fltfnc.cxx
+++ b/sfx2/source/bastyp/fltfnc.cxx
@@ -255,6 +255,14 @@ public:
, pList(0)
{
}
+ ~SfxFilterMatcher_Impl()
+ {
+ // SfxFilterMatcher_Impl::InitForIterating() will set pList to
+ // either the global filter array matcher pFilterArr, or to
+ // a new SfxFilterList_Impl.
+ if (pList != pFilterArr)
+ delete pList;
+ }
};
namespace
@@ -287,7 +295,7 @@ namespace
// previously
SfxFilterMatcherArr_Impl::iterator aEnd = aImplArr.end();
SfxFilterMatcherArr_Impl::iterator aIter =
- std::find_if(aImplArr.begin(), aEnd, hasName(rName));
+ std::find_if(aImplArr.begin(), aEnd, hasName(aName));
if (aIter != aEnd)
return *aIter;