summaryrefslogtreecommitdiff
path: root/svl
diff options
context:
space:
mode:
authorTakeshi Abe <tabe@fixedpoint.jp>2014-07-10 00:05:35 +0900
committerTakeshi Abe <tabe@fixedpoint.jp>2014-07-10 06:35:12 +0900
commit4468ab0e0c0ecb50de68d2ecce327756a50eb0ae (patch)
treeea27ea7a02278ed05735963894566b472882553f /svl
parent6bcf07ec389ee78720e2dcfd66ee8ec57dd168a3 (diff)
Avoid possible memory leaks in case of exceptions
Change-Id: I1dd003bc984a11d6d71c92aae44accc9d358db0c
Diffstat (limited to 'svl')
-rw-r--r--svl/source/items/itemprop.cxx9
-rw-r--r--svl/source/items/poolio.cxx4
-rw-r--r--svl/source/numbers/zforlist.cxx65
-rw-r--r--svl/source/numbers/zformat.cxx7
4 files changed, 36 insertions, 49 deletions
diff --git a/svl/source/items/itemprop.cxx b/svl/source/items/itemprop.cxx
index 41f1a0433055..3ba833fb1b17 100644
--- a/svl/source/items/itemprop.cxx
+++ b/svl/source/items/itemprop.cxx
@@ -22,6 +22,7 @@
#include <svl/itempool.hxx>
#include <svl/itemset.hxx>
#include <com/sun/star/beans/PropertyAttribute.hpp>
+#include <boost/scoped_ptr.hpp>
#include <boost/unordered_map.hpp>
/*************************************************************************
UNO III Implementation
@@ -242,7 +243,7 @@ void SfxItemPropertySet::setPropertyValue( const SfxItemPropertySimpleEntry& rEn
{
// get the SfxPoolItem
const SfxPoolItem* pItem = 0;
- SfxPoolItem *pNewItem = 0;
+ boost::scoped_ptr<SfxPoolItem> pNewItem;
SfxItemState eState = rSet.GetItemState( rEntry.nWID, true, &pItem );
if(SFX_ITEM_SET != eState && SFX_WHICH_MAX > rEntry.nWID )
pItem = &rSet.GetPool()->GetDefaultItem(rEntry.nWID);
@@ -253,23 +254,21 @@ void SfxItemPropertySet::setPropertyValue( const SfxItemPropertySimpleEntry& rEn
if(FillItem(aSet, rEntry.nWID, false))
{
const SfxPoolItem &rItem = aSet.Get(rEntry.nWID);
- pNewItem = rItem.Clone();
+ pNewItem.reset(rItem.Clone());
}
}
if(!pNewItem && pItem)
{
- pNewItem = pItem->Clone();
+ pNewItem.reset(pItem->Clone());
}
if(pNewItem)
{
if( !pNewItem->PutValue( aVal, rEntry.nMemberId ) )
{
- DELETEZ(pNewItem);
throw IllegalArgumentException();
}
// apply new item
rSet.Put( *pNewItem, rEntry.nWID );
- delete pNewItem;
}
}
diff --git a/svl/source/items/poolio.cxx b/svl/source/items/poolio.cxx
index ac481ba3ed59..08267a97df53 100644
--- a/svl/source/items/poolio.cxx
+++ b/svl/source/items/poolio.cxx
@@ -28,6 +28,7 @@
#include <svl/brdcst.hxx>
#include <svl/filerec.hxx>
#include "poolio.hxx"
+#include <boost/scoped_ptr.hpp>
#include <boost/scoped_array.hpp>
/**
@@ -207,11 +208,10 @@ SvStream &SfxItemPool::Store(SvStream &rStream) const
{
sal_uLong nMark = rStream.Tell();
rStream.Seek( nItemStartPos + sizeof(sal_uInt16) );
- SfxPoolItem *pClone = pItem->Create(rStream, nItemVersion );
+ boost::scoped_ptr<SfxPoolItem> pClone(pItem->Create(rStream, nItemVersion ));
sal_uInt16 nWh = pItem->Which();
SFX_ASSERT( rStream.Tell() == nMark, nWh,"asymmetric store/create" );
SFX_ASSERT( *pClone == *pItem, nWh, "unequal after store/create" );
- delete pClone;
}
#endif
}
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 020d84542753..4c0f6bd4ec95 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -45,6 +45,7 @@
#include <math.h>
#include <limits>
+#include <boost/scoped_ptr.hpp>
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
@@ -685,7 +686,7 @@ void SvNumberFormatter::DeleteEntry(sal_uInt32 nKey)
bool SvNumberFormatter::Load( SvStream& rStream )
{
LanguageType eSysLang = SvtSysLocale().GetLanguageTag().getLanguageType();
- SvNumberFormatter* pConverter = NULL;
+ boost::scoped_ptr<SvNumberFormatter> pConverter;
ImpSvNumMultipleReadHeader aHdr( rStream );
sal_uInt16 nVersion;
@@ -725,7 +726,7 @@ bool SvNumberFormatter::Load( SvStream& rStream )
// different SYSTEM locale
if ( !pConverter )
{
- pConverter = new SvNumberFormatter( m_xContext, eSysLang );
+ pConverter.reset(new SvNumberFormatter( m_xContext, eSysLang ));
}
pEntry->ConvertLanguage( *pConverter, eSaveSysLang, eLoadSysLang, true );
}
@@ -763,10 +764,7 @@ bool SvNumberFormatter::Load( SvStream& rStream )
aHdr.EndEntry();
}
- if ( pConverter )
- {
- delete pConverter;
- }
+ pConverter.reset();
// generate additional i18n standard formats for all used locales
LanguageType eOldLanguage = ActLnge;
@@ -1562,11 +1560,11 @@ bool SvNumberFormatter::GetPreviewString(const OUString& sFormatString,
eLnge = ActLnge;
sal_Int32 nCheckPos = -1;
OUString sTmpString = sFormatString;
- SvNumberformat* p_Entry = new SvNumberformat(sTmpString,
+ boost::scoped_ptr<SvNumberformat> p_Entry(new SvNumberformat(sTmpString,
pFormatScanner,
pStringScanner,
nCheckPos,
- eLnge);
+ eLnge));
if (nCheckPos == 0) // String ok
{
sal_uInt32 CLOffset = ImpGenerateCL(eLnge); // create new standard formats if necessary
@@ -1587,12 +1585,10 @@ bool SvNumberFormatter::GetPreviewString(const OUString& sFormatString,
p_Entry->SetStarFormatSupport( false );
}
}
- delete p_Entry;
return true;
}
else
{
- delete p_Entry;
return false;
}
}
@@ -1625,15 +1621,15 @@ bool SvNumberFormatter::GetPreviewStringGuess( const OUString& sFormatString,
return true;
}
- SvNumberformat *pEntry = NULL;
+ boost::scoped_ptr<SvNumberformat> pEntry;
sal_Int32 nCheckPos = -1;
OUString sTmpString;
if ( bEnglish )
{
sTmpString = sFormatString;
- pEntry = new SvNumberformat( sTmpString, pFormatScanner,
- pStringScanner, nCheckPos, eLnge );
+ pEntry.reset(new SvNumberformat( sTmpString, pFormatScanner,
+ pStringScanner, nCheckPos, eLnge ));
}
else
{
@@ -1645,8 +1641,8 @@ bool SvNumberFormatter::GetPreviewStringGuess( const OUString& sFormatString,
LanguageType eFormatLang = LANGUAGE_ENGLISH_US;
pFormatScanner->SetConvertMode( LANGUAGE_ENGLISH_US, eLnge );
sTmpString = sFormatString;
- pEntry = new SvNumberformat( sTmpString, pFormatScanner,
- pStringScanner, nCheckPos, eFormatLang );
+ pEntry.reset(new SvNumberformat( sTmpString, pFormatScanner,
+ pStringScanner, nCheckPos, eFormatLang ));
pFormatScanner->SetConvertMode( false );
ChangeIntl( eLnge );
@@ -1656,10 +1652,9 @@ bool SvNumberFormatter::GetPreviewStringGuess( const OUString& sFormatString,
pEntry->GetFormatstring() ) )
{
// other Format
- delete pEntry;
sTmpString = sFormatString;
- pEntry = new SvNumberformat( sTmpString, pFormatScanner,
- pStringScanner, nCheckPos, eLnge );
+ pEntry.reset(new SvNumberformat( sTmpString, pFormatScanner,
+ pStringScanner, nCheckPos, eLnge ));
}
else
{
@@ -1669,20 +1664,18 @@ bool SvNumberFormatter::GetPreviewStringGuess( const OUString& sFormatString,
eFormatLang = eLnge;
pFormatScanner->SetConvertMode( eLnge, LANGUAGE_ENGLISH_US );
sTmpString = sFormatString;
- SvNumberformat* pEntry2 = new SvNumberformat( sTmpString, pFormatScanner,
- pStringScanner, nCheckPos2, eFormatLang );
+ boost::scoped_ptr<SvNumberformat> pEntry2(new SvNumberformat( sTmpString, pFormatScanner,
+ pStringScanner, nCheckPos2, eFormatLang ));
pFormatScanner->SetConvertMode( false );
ChangeIntl( eLnge );
if ( nCheckPos2 == 0 && !xTransliteration->isEqual( sFormatString,
pEntry2->GetFormatstring() ) )
{
// other Format
- delete pEntry;
sTmpString = sFormatString;
- pEntry = new SvNumberformat( sTmpString, pFormatScanner,
- pStringScanner, nCheckPos, eLnge );
+ pEntry.reset(new SvNumberformat( sTmpString, pFormatScanner,
+ pStringScanner, nCheckPos, eLnge ));
}
- delete pEntry2;
}
}
}
@@ -1691,10 +1684,8 @@ bool SvNumberFormatter::GetPreviewStringGuess( const OUString& sFormatString,
{
ImpGenerateCL( eLnge ); // create new standard formats if necessary
pEntry->GetOutputString( fPreviewNumber, sOutString, ppColor );
- delete pEntry;
return true;
}
- delete pEntry;
return false;
}
@@ -1717,11 +1708,11 @@ bool SvNumberFormatter::GetPreviewString( const OUString& sFormatString,
eLnge = ActLnge;
sal_Int32 nCheckPos = -1;
OUString sTmpString = sFormatString;
- SvNumberformat* p_Entry = new SvNumberformat( sTmpString,
+ boost::scoped_ptr<SvNumberformat> p_Entry(new SvNumberformat( sTmpString,
pFormatScanner,
pStringScanner,
nCheckPos,
- eLnge);
+ eLnge));
if (nCheckPos == 0) // String ok
{
// May have to create standard formats for this locale.
@@ -1746,12 +1737,10 @@ bool SvNumberFormatter::GetPreviewString( const OUString& sFormatString,
sOutString = sPreviewString;
}
}
- delete p_Entry;
return true;
}
else
{
- delete p_Entry;
return false;
}
}
@@ -1772,11 +1761,11 @@ sal_uInt32 SvNumberFormatter::TestNewString(const OUString& sFormatString,
sal_uInt32 nRes;
sal_Int32 nCheckPos = -1;
OUString sTmpString = sFormatString;
- SvNumberformat* pEntry = new SvNumberformat(sTmpString,
+ boost::scoped_ptr<SvNumberformat> pEntry(new SvNumberformat(sTmpString,
pFormatScanner,
pStringScanner,
nCheckPos,
- eLnge);
+ eLnge));
if (nCheckPos == 0) // String ok
{
sal_uInt32 CLOffset = ImpGenerateCL(eLnge); // create new standard formats if necessary
@@ -1787,7 +1776,6 @@ sal_uInt32 SvNumberFormatter::TestNewString(const OUString& sFormatString,
{
nRes = NUMBERFORMAT_ENTRY_NOT_FOUND;
}
- delete pEntry;
return nRes;
}
@@ -1988,8 +1976,8 @@ sal_uInt32 SvNumberFormatter::GetFormatSpecialInfo( const OUString& rFormatStrin
eLnge = ActLnge;
OUString aTmpStr( rFormatString );
sal_Int32 nCheckPos = 0;
- SvNumberformat* pFormat = new SvNumberformat( aTmpStr, pFormatScanner,
- pStringScanner, nCheckPos, eLnge );
+ boost::scoped_ptr<SvNumberformat> pFormat(new SvNumberformat( aTmpStr, pFormatScanner,
+ pStringScanner, nCheckPos, eLnge ));
if ( nCheckPos == 0 )
{
pFormat->GetFormatSpecialInfo( bThousand, IsRed, nPrecision, nAnzLeading );
@@ -2001,7 +1989,6 @@ sal_uInt32 SvNumberFormatter::GetFormatSpecialInfo( const OUString& rFormatStrin
nPrecision = pFormatScanner->GetStandardPrec();
nAnzLeading = 0;
}
- delete pFormat;
return nCheckPos;
}
@@ -3698,9 +3685,9 @@ void SvNumberFormatter::ImpInitCurrencyTable()
bInitializing = true;
LanguageType eSysLang = SvtSysLocale().GetLanguageTag().getLanguageType();
- LocaleDataWrapper* pLocaleData = new LocaleDataWrapper(
+ boost::scoped_ptr<LocaleDataWrapper> pLocaleData(new LocaleDataWrapper(
::comphelper::getProcessComponentContext(),
- SvtSysLocale().GetLanguageTag() );
+ SvtSysLocale().GetLanguageTag() ));
// get user configured currency
OUString aConfiguredCurrencyAbbrev;
LanguageType eConfiguredCurrencyLanguage = LANGUAGE_SYSTEM;
@@ -3835,7 +3822,7 @@ void SvNumberFormatter::ImpInitCurrencyTable()
LocaleDataWrapper::outputCheckMessage(
"SvNumberFormatter::ImpInitCurrencyTable: system currency not in I18N locale data.");
}
- delete pLocaleData;
+ pLocaleData.reset();
SvtSysLocaleOptions::SetCurrencyChangeLink( STATIC_LINK( NULL, SvNumberFormatter, CurrencyChangeLink ) );
bInitializing = false;
bCurrencyTableInitialized = true;
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index ef94a236ec93..5815cac9147d 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -46,6 +46,7 @@
#include <svl/nfsymbol.hxx>
#include <cmath>
+#include <boost/scoped_ptr.hpp>
using namespace svt;
@@ -1853,11 +1854,11 @@ NfHackConversion SvNumberformat::Load( SvStream& rStream,
// Parse new ones etc.
OUString aStr( sFormatstring );
sal_Int32 nCheckPos = 0;
- SvNumberformat* pFormat = new SvNumberformat( aStr, &rScan, &rISc,
- nCheckPos, maLocale.meLanguage, bStandard );
+ boost::scoped_ptr<SvNumberformat> pFormat(new SvNumberformat( aStr, &rScan, &rISc,
+ nCheckPos, maLocale.meLanguage, bStandard ));
DBG_ASSERT( !nCheckPos, "SvNumberformat::Load: NewCurrencyRescan nCheckPos" );
ImpCopyNumberformat( *pFormat );
- delete pFormat;
+ pFormat.reset();
// Recover states
eType |= nDefined;