Avoid possible memory leaks in case of exceptions
Change-Id: Icecc2cce52d7f27c030270639e6b85877e3aa620
This commit is contained in:
parent
9a6cf48618
commit
d97b5e420f
@ -25,6 +25,8 @@
|
||||
#include <string.h>
|
||||
#include "image.hxx"
|
||||
#include <codegen.hxx>
|
||||
#include <boost/scoped_array.hpp>
|
||||
|
||||
SbiImage::SbiImage()
|
||||
{
|
||||
pStringOff = NULL;
|
||||
@ -206,15 +208,14 @@ bool SbiImage::Load( SvStream& r, sal_uInt32& nVersion )
|
||||
pStrings = new sal_Unicode[ nLen ];
|
||||
nStringSize = (sal_uInt16) nLen;
|
||||
|
||||
char* pByteStrings = new char[ nLen ];
|
||||
r.Read( pByteStrings, nStringSize );
|
||||
boost::scoped_array<char> pByteStrings(new char[ nLen ]);
|
||||
r.Read( pByteStrings.get(), nStringSize );
|
||||
for( short j = 0; j < nStrings; j++ )
|
||||
{
|
||||
sal_uInt16 nOff2 = (sal_uInt16) pStringOff[ j ];
|
||||
OUString aStr( pByteStrings + nOff2, strlen(pByteStrings + nOff2), eCharSet );
|
||||
OUString aStr( pByteStrings.get() + nOff2, strlen(pByteStrings.get() + nOff2), eCharSet );
|
||||
memcpy( pStrings + nOff2, aStr.getStr(), (aStr.getLength() + 1) * sizeof( sal_Unicode ) );
|
||||
}
|
||||
delete[] pByteStrings;
|
||||
}
|
||||
break;
|
||||
case B_MODEND:
|
||||
@ -324,17 +325,17 @@ bool SbiImage::Save( SvStream& r, sal_uInt32 nVer )
|
||||
r.WriteUInt32( (sal_uInt32) pStringOff[ i ] );
|
||||
}
|
||||
// Then the String-Block
|
||||
char* pByteStrings = new char[ nStringSize ];
|
||||
boost::scoped_array<char> pByteStrings(new char[ nStringSize ]);
|
||||
for( i = 0; i < nStrings; i++ )
|
||||
{
|
||||
sal_uInt16 nOff = (sal_uInt16) pStringOff[ i ];
|
||||
OString aStr(OUStringToOString(OUString(pStrings + nOff), eCharSet));
|
||||
memcpy( pByteStrings + nOff, aStr.getStr(), (aStr.getLength() + 1) * sizeof( char ) );
|
||||
memcpy( pByteStrings.get() + nOff, aStr.getStr(), (aStr.getLength() + 1) * sizeof( char ) );
|
||||
}
|
||||
r.WriteUInt32( (sal_uInt32) nStringSize );
|
||||
r.Write( pByteStrings, nStringSize );
|
||||
r.Write( pByteStrings.get(), nStringSize );
|
||||
|
||||
delete[] pByteStrings;
|
||||
pByteStrings.reset();
|
||||
SbiCloseRecord( r, nPos );
|
||||
}
|
||||
// Set overall length
|
||||
|
@ -46,6 +46,7 @@
|
||||
#include <com/sun/star/util/XCloseBroadcaster.hpp>
|
||||
#include <com/sun/star/util/XCloseListener.hpp>
|
||||
#include "errobject.hxx"
|
||||
#include <boost/scoped_array.hpp>
|
||||
#include <boost/unordered_map.hpp>
|
||||
|
||||
#include <com/sun/star/script/ModuleType.hpp>
|
||||
@ -1872,7 +1873,7 @@ bool StarBASIC::LoadData( SvStream& r, sal_uInt16 nVer )
|
||||
// #95459 Delete dialogs, otherwise endless recursion
|
||||
// in SbxVarable::GetType() if dialogs are accessed
|
||||
sal_uInt16 nObjCount = pObjs->Count();
|
||||
SbxVariable** ppDeleteTab = new SbxVariable*[ nObjCount ];
|
||||
boost::scoped_array<SbxVariable*> ppDeleteTab(new SbxVariable*[ nObjCount ]);
|
||||
sal_uInt16 nObj;
|
||||
|
||||
for( nObj = 0 ; nObj < nObjCount ; nObj++ )
|
||||
@ -1889,7 +1890,7 @@ bool StarBASIC::LoadData( SvStream& r, sal_uInt16 nVer )
|
||||
pObjs->Remove( pVar );
|
||||
}
|
||||
}
|
||||
delete[] ppDeleteTab;
|
||||
ppDeleteTab.reset();
|
||||
|
||||
sal_uInt16 nMod;
|
||||
pModules->Clear();
|
||||
|
@ -588,7 +588,7 @@ void SbiParser::DefType( bool bPrivate )
|
||||
|
||||
SbxObject *pType = new SbxObject(aSym);
|
||||
|
||||
SbiSymDef* pElem;
|
||||
boost::scoped_ptr<SbiSymDef> pElem;
|
||||
SbiDimList* pDim = NULL;
|
||||
bool bDone = false;
|
||||
|
||||
@ -597,19 +597,17 @@ void SbiParser::DefType( bool bPrivate )
|
||||
switch( Peek() )
|
||||
{
|
||||
case ENDTYPE :
|
||||
pElem = NULL;
|
||||
bDone = true;
|
||||
Next();
|
||||
break;
|
||||
|
||||
case EOLN :
|
||||
case REM :
|
||||
pElem = NULL;
|
||||
Next();
|
||||
break;
|
||||
|
||||
default:
|
||||
pElem = VarDecl(&pDim, false, false);
|
||||
pElem.reset(VarDecl(&pDim, false, false));
|
||||
if( !pElem )
|
||||
bDone = true; // Error occurred
|
||||
}
|
||||
@ -678,7 +676,7 @@ void SbiParser::DefType( bool bPrivate )
|
||||
pTypeMembers->Insert( pTypeElem, pTypeMembers->Count() );
|
||||
}
|
||||
delete pDim, pDim = NULL;
|
||||
delete pElem;
|
||||
pElem.reset();
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user