Kaydet (Commit) b596eabd authored tarafından Armin Le Grand's avatar Armin Le Grand

#1200074# memory leak by not freeing helper class instances of StyleReplaceData.

Patch by: Chao Huang
Found by: Chao Huang
Review by: alg
üst 0711fae8
......@@ -1205,8 +1205,7 @@ void SdDrawDocument::RenameLayoutTemplate(const String& rOldLayoutName, const St
// erase everything after '~LT~'
aOldName.Erase(nPos + sizeof(SD_LT_SEPARATOR) - 1 );
sal_uInt16 nLen = aOldName.Len();
List aReplList;
std::vector< StyleReplaceData* > aRememberedStyleReplaceData; // #120074#
SfxStyleSheetIterator aIter(mxStyleSheetPool.get(), SD_STYLE_FAMILY_MASTERPAGE);
SfxStyleSheetBase* pSheet = aIter.First();
......@@ -1225,7 +1224,7 @@ void SdDrawDocument::RenameLayoutTemplate(const String& rOldLayoutName, const St
pReplData->nNewFamily = pSheet->GetFamily();
pReplData->aName = pSheet->GetName();
pReplData->aNewName = aSheetName;
aReplList.Insert(pReplData, LIST_APPEND);
aRememberedStyleReplaceData.push_back(pReplData);
pSheet->SetName(aSheetName);
}
......@@ -1267,12 +1266,10 @@ void SdDrawDocument::RenameLayoutTemplate(const String& rOldLayoutName, const St
if (pOPO)
{
StyleReplaceData* pReplData = (StyleReplaceData*) aReplList.First();
while( pReplData )
for(std::vector< StyleReplaceData* >::const_iterator aData(aRememberedStyleReplaceData.begin());
aData != aRememberedStyleReplaceData.end(); aData++)
{
pOPO->ChangeStyleSheets( pReplData->aName, pReplData->nFamily, pReplData->aNewName, pReplData->nNewFamily );
pReplData = (StyleReplaceData*) aReplList.Next();
pOPO->ChangeStyleSheets((*aData)->aName, (*aData)->nFamily, (*aData)->aNewName, (*aData)->nNewFamily);
}
}
}
......@@ -1315,12 +1312,10 @@ void SdDrawDocument::RenameLayoutTemplate(const String& rOldLayoutName, const St
if (pOPO)
{
StyleReplaceData* pReplData = (StyleReplaceData*) aReplList.First();
while( pReplData )
for(std::vector< StyleReplaceData* >::const_iterator aData(aRememberedStyleReplaceData.begin());
aData != aRememberedStyleReplaceData.end(); aData++)
{
pOPO->ChangeStyleSheets( pReplData->aName, pReplData->nFamily, pReplData->aNewName, pReplData->nNewFamily );
pReplData = (StyleReplaceData*) aReplList.Next();
pOPO->ChangeStyleSheets((*aData)->aName, (*aData)->nFamily, (*aData)->aNewName, (*aData)->nNewFamily);
}
}
}
......@@ -1333,6 +1328,13 @@ void SdDrawDocument::RenameLayoutTemplate(const String& rOldLayoutName, const St
}
}
}
// #120074# was not freed in older versoins, memory leak
while(!aRememberedStyleReplaceData.empty())
{
delete aRememberedStyleReplaceData[aRememberedStyleReplaceData.size() - 1];
aRememberedStyleReplaceData.pop_back();
}
}
/*************************************************************************
......
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