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 ...@@ -1205,8 +1205,7 @@ void SdDrawDocument::RenameLayoutTemplate(const String& rOldLayoutName, const St
// erase everything after '~LT~' // erase everything after '~LT~'
aOldName.Erase(nPos + sizeof(SD_LT_SEPARATOR) - 1 ); aOldName.Erase(nPos + sizeof(SD_LT_SEPARATOR) - 1 );
sal_uInt16 nLen = aOldName.Len(); sal_uInt16 nLen = aOldName.Len();
std::vector< StyleReplaceData* > aRememberedStyleReplaceData; // #120074#
List aReplList;
SfxStyleSheetIterator aIter(mxStyleSheetPool.get(), SD_STYLE_FAMILY_MASTERPAGE); SfxStyleSheetIterator aIter(mxStyleSheetPool.get(), SD_STYLE_FAMILY_MASTERPAGE);
SfxStyleSheetBase* pSheet = aIter.First(); SfxStyleSheetBase* pSheet = aIter.First();
...@@ -1225,7 +1224,7 @@ void SdDrawDocument::RenameLayoutTemplate(const String& rOldLayoutName, const St ...@@ -1225,7 +1224,7 @@ void SdDrawDocument::RenameLayoutTemplate(const String& rOldLayoutName, const St
pReplData->nNewFamily = pSheet->GetFamily(); pReplData->nNewFamily = pSheet->GetFamily();
pReplData->aName = pSheet->GetName(); pReplData->aName = pSheet->GetName();
pReplData->aNewName = aSheetName; pReplData->aNewName = aSheetName;
aReplList.Insert(pReplData, LIST_APPEND); aRememberedStyleReplaceData.push_back(pReplData);
pSheet->SetName(aSheetName); pSheet->SetName(aSheetName);
} }
...@@ -1267,12 +1266,10 @@ void SdDrawDocument::RenameLayoutTemplate(const String& rOldLayoutName, const St ...@@ -1267,12 +1266,10 @@ void SdDrawDocument::RenameLayoutTemplate(const String& rOldLayoutName, const St
if (pOPO) if (pOPO)
{ {
StyleReplaceData* pReplData = (StyleReplaceData*) aReplList.First(); for(std::vector< StyleReplaceData* >::const_iterator aData(aRememberedStyleReplaceData.begin());
aData != aRememberedStyleReplaceData.end(); aData++)
while( pReplData )
{ {
pOPO->ChangeStyleSheets( pReplData->aName, pReplData->nFamily, pReplData->aNewName, pReplData->nNewFamily ); pOPO->ChangeStyleSheets((*aData)->aName, (*aData)->nFamily, (*aData)->aNewName, (*aData)->nNewFamily);
pReplData = (StyleReplaceData*) aReplList.Next();
} }
} }
} }
...@@ -1315,12 +1312,10 @@ void SdDrawDocument::RenameLayoutTemplate(const String& rOldLayoutName, const St ...@@ -1315,12 +1312,10 @@ void SdDrawDocument::RenameLayoutTemplate(const String& rOldLayoutName, const St
if (pOPO) if (pOPO)
{ {
StyleReplaceData* pReplData = (StyleReplaceData*) aReplList.First(); for(std::vector< StyleReplaceData* >::const_iterator aData(aRememberedStyleReplaceData.begin());
aData != aRememberedStyleReplaceData.end(); aData++)
while( pReplData )
{ {
pOPO->ChangeStyleSheets( pReplData->aName, pReplData->nFamily, pReplData->aNewName, pReplData->nNewFamily ); pOPO->ChangeStyleSheets((*aData)->aName, (*aData)->nFamily, (*aData)->aNewName, (*aData)->nNewFamily);
pReplData = (StyleReplaceData*) aReplList.Next();
} }
} }
} }
...@@ -1333,6 +1328,13 @@ void SdDrawDocument::RenameLayoutTemplate(const String& rOldLayoutName, const St ...@@ -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