About coverity 705732 (svdundo.cxx from svx module)
julien2412
serval2412 at yahoo.fr
Tue Mar 12 13:43:21 PDT 2013
Hello,
Scan coverity reported this:
leaked_storage: Variable "pText1" going out of scope leaks the storage it
points to.
See
http://opengrok.libreoffice.org/xref/core/svx/source/svdraw/svdundo.cxx#1137
1137 void SdrUndoObjSetText::Redo()
1138 {
1139 // copy text for Undo, because the original now belongs to
SetOutlinerParaObject()
1140 OutlinerParaObject* pText1 = pNewText;
1141
1142 if(pText1)
1143 pText1 = new OutlinerParaObject(*pText1);
1144
1145 SdrText* pText = static_cast< SdrTextObj*>( pObj
)->getText(mnText);
1146 if( pText )
1147 static_cast< SdrTextObj* >( pObj
)->NbcSetOutlinerParaObjectForText( pText1, pText );
1148
1149 pObj->ActionChanged();
1150
1151 // Trigger PageChangeCall
1152 ImpShowPageOfThisObject();
1153 }
I noticed several things:
1) we could replace "if (pText1)" by "if (pNewText)". Of course if blocks
must be changed
2) if pText1 corresponds to a new OutlinerParaObject and !pText, it seems
there's a leak
3) why pObj->ActionChanged() and ImpShowPageOfThisObject() are always
called ?
So I thought about this patch:
void SdrUndoObjSetText::Redo()
{
SdrText* pText = static_cast< SdrTextObj*>( pObj )->getText(mnText);
if( pText && pNewText)
{
// copy text for Undo, because the original now belongs to
SetOutlinerParaObject()
OutlinerParaObject* pText1 = new OutlinerParaObject(*pNewText);
static_cast< SdrTextObj* >( pObj )->NbcSetOutlinerParaObjectForText(
pText1, pText );
pObj->ActionChanged();
// Trigger PageChangeCall
ImpShowPageOfThisObject();
}
}
Any comment?
Julien
--
View this message in context: http://nabble.documentfoundation.org/About-coverity-705732-svdundo-cxx-from-svx-module-tp4043389.html
Sent from the Dev mailing list archive at Nabble.com.
More information about the LibreOffice
mailing list