Kaydet (Commit) a6a8c379 authored tarafından Mark Wielaard's avatar Mark Wielaard Kaydeden (comit) Fridrich Strba

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/3989Reviewed-by: 's avatarFridrich Strba <fridrich@documentfoundation.org>
Tested-by: 's avatarFridrich Strba <fridrich@documentfoundation.org>
üst 3661c3eb
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment