summaryrefslogtreecommitdiff
path: root/filter
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-03-07 13:26:51 +0000
committerCaolán McNamara <caolanm@redhat.com>2017-03-07 13:36:19 +0000
commit260bfa5e4913c4ecb5720f3ef5163333374de744 (patch)
tree2eca7816c95998c224f984d883af0db276008853 /filter
parent33ef289f700292a879579b98e58c32235c05a092 (diff)
ofz: fix ppt import leak
Change-Id: I48b855f96464c74b76b473d5674fcdcc8388bf1b
Diffstat (limited to 'filter')
-rw-r--r--filter/source/msfilter/svdfppt.cxx56
1 files changed, 25 insertions, 31 deletions
diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx
index 9b941379fff3..cb2fceb430a7 100644
--- a/filter/source/msfilter/svdfppt.cxx
+++ b/filter/source/msfilter/svdfppt.cxx
@@ -6399,10 +6399,7 @@ PPTPortionObj* PPTParagraphObj::Next()
PPTFieldEntry::~PPTFieldEntry()
{
- delete pField1;
- delete pField2;
- delete pString;
-};
+}
void PPTFieldEntry::GetDateTime( const sal_uInt32 nVal, SvxDateFormat& eDateFormat, SvxTimeFormat& eTimeFormat )
{
@@ -6453,14 +6450,14 @@ void PPTFieldEntry::SetDateTime( sal_uInt32 nVal )
SvxTimeFormat eTimeFormat;
GetDateTime( nVal, eDateFormat, eTimeFormat );
if ( eDateFormat != SVXDATEFORMAT_APPDEFAULT )
- pField1 = new SvxFieldItem( SvxDateField( Date( Date::SYSTEM ), SVXDATETYPE_VAR, eDateFormat ), EE_FEATURE_FIELD );
+ xField1.reset(new SvxFieldItem(SvxDateField( Date( Date::SYSTEM ), SVXDATETYPE_VAR, eDateFormat ), EE_FEATURE_FIELD));
if ( eTimeFormat != SVXTIMEFORMAT_APPDEFAULT )
{
- SvxFieldItem* pFieldItem = new SvxFieldItem( SvxExtTimeField( tools::Time( tools::Time::SYSTEM ), SVXTIMETYPE_VAR, eTimeFormat ), EE_FEATURE_FIELD );
- if ( pField1 )
- pField2 = pFieldItem;
+ std::unique_ptr<SvxFieldItem> xFieldItem(new SvxFieldItem(SvxExtTimeField( tools::Time( tools::Time::SYSTEM ), SVXTIMETYPE_VAR, eTimeFormat ), EE_FEATURE_FIELD));
+ if (xField1)
+ xField2 = std::move(xFieldItem);
else
- pField1 = pFieldItem;
+ xField1 = std::move(xFieldItem);
}
}
@@ -6763,7 +6760,7 @@ PPTTextObj::PPTTextObj( SvStream& rIn, SdrPowerPointImport& rSdrPowerPointImport
{
xEntry.reset(new PPTFieldEntry);
rIn.ReadUInt16(xEntry->nPos);
- xEntry->pField1 = new SvxFieldItem( SvxFooterField(), EE_FEATURE_FIELD );
+ xEntry->xField1.reset(new SvxFieldItem(SvxFooterField(), EE_FEATURE_FIELD));
}
break;
@@ -6771,7 +6768,7 @@ PPTTextObj::PPTTextObj( SvStream& rIn, SdrPowerPointImport& rSdrPowerPointImport
{
xEntry.reset(new PPTFieldEntry);
rIn.ReadUInt16(xEntry->nPos);
- xEntry->pField1 = new SvxFieldItem( SvxHeaderField(), EE_FEATURE_FIELD );
+ xEntry->xField1.reset(new SvxFieldItem(SvxHeaderField(), EE_FEATURE_FIELD));
}
break;
@@ -6779,13 +6776,13 @@ PPTTextObj::PPTTextObj( SvStream& rIn, SdrPowerPointImport& rSdrPowerPointImport
{
xEntry.reset(new PPTFieldEntry);
rIn.ReadUInt16(xEntry->nPos);
- xEntry->pField1 = new SvxFieldItem( SvxDateTimeField(), EE_FEATURE_FIELD );
+ xEntry->xField1.reset(new SvxFieldItem(SvxDateTimeField(), EE_FEATURE_FIELD));
if ( rPersistEntry.pHeaderFooterEntry ) // sj: #i34111# on master pages it is possible
{ // that there is no HeaderFooterEntry available
if ( rPersistEntry.pHeaderFooterEntry->nAtom & 0x20000 ) // auto date time
xEntry->SetDateTime( rPersistEntry.pHeaderFooterEntry->nAtom & 0xff );
else
- xEntry->pString = new OUString( rPersistEntry.pHeaderFooterEntry->pPlaceholder[ nVal ] );
+ xEntry->xString.reset(new OUString( rPersistEntry.pHeaderFooterEntry->pPlaceholder[ nVal ] ));
}
}
break;
@@ -6804,7 +6801,7 @@ PPTTextObj::PPTTextObj( SvStream& rIn, SdrPowerPointImport& rSdrPowerPointImport
switch( aTextHd.nRecType )
{
case PPT_PST_SlideNumberMCAtom:
- xEntry->pField1 = new SvxFieldItem( SvxPageField(), EE_FEATURE_FIELD );
+ xEntry->xField1.reset(new SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD));
break;
case PPT_PST_RTFDateTimeMCAtom:
@@ -6837,7 +6834,7 @@ PPTTextObj::PPTTextObj( SvStream& rIn, SdrPowerPointImport& rSdrPowerPointImport
else if (!n)
{
// End of format string
- xEntry->pString = new OUString( aStr );
+ xEntry->xString.reset(new OUString( aStr ));
break;
}
else if (!inquote)
@@ -6853,10 +6850,10 @@ PPTTextObj::PPTTextObj( SvStream& rIn, SdrPowerPointImport& rSdrPowerPointImport
}
}
}
- if (!xEntry->pString)
+ if (!xEntry->xString)
{
// Handle as previously
- xEntry->pField1 = new SvxFieldItem( SvxDateField( Date( Date::SYSTEM ), SVXDATETYPE_FIX ), EE_FEATURE_FIELD );
+ xEntry->xField1.reset(new SvxFieldItem( SvxDateField( Date( Date::SYSTEM ), SVXDATETYPE_FIX ), EE_FEATURE_FIELD ));
}
}
}
@@ -6898,7 +6895,7 @@ PPTTextObj::PPTTextObj( SvStream& rIn, SdrPowerPointImport& rSdrPowerPointImport
aTarget += "#";
aTarget += pHyperlink->aConvSubString;
}
- xEntry->pField1 = new SvxFieldItem( SvxURLField( aTarget, OUString(), SVXURLFORMAT_REPR ), EE_FEATURE_FIELD );
+ xEntry->xField1.reset(new SvxFieldItem( SvxURLField( aTarget, OUString(), SVXURLFORMAT_REPR ), EE_FEATURE_FIELD ));
}
}
break;
@@ -6962,11 +6959,10 @@ PPTTextObj::PPTTextObj( SvStream& rIn, SdrPowerPointImport& rSdrPowerPointImport
pNewCPS->maString = aString.copy( nCount + 1, nBehind );
aCharPropList.insert( aCharPropList.begin() + n + 1, pNewCPS );
}
- if ( (*FE)->pField2 )
+ if ( (*FE)->xField2 )
{
PPTCharPropSet* pNewCPS = new PPTCharPropSet( *pSet );
- pNewCPS->mpFieldItem.reset( (*FE)->pField2 );
- (*FE)->pField2 = nullptr;
+ pNewCPS->mpFieldItem = std::move((*FE)->xField2);
aCharPropList.insert( aCharPropList.begin() + n + 1, pNewCPS );
pNewCPS = new PPTCharPropSet( *pSet );
@@ -6979,13 +6975,12 @@ PPTTextObj::PPTTextObj( SvStream& rIn, SdrPowerPointImport& rSdrPowerPointImport
pNewCPS->maString = aString.copy( 0, nCount );
aCharPropList.insert( aCharPropList.begin() + n++, pNewCPS );
}
- if ( (*FE)->pField1 )
+ if ( (*FE)->xField1 )
{
- pSet->mpFieldItem.reset( (*FE)->pField1 );
- (*FE)->pField1 = nullptr;
+ pSet->mpFieldItem = std::move((*FE)->xField1);
}
- else if ( (*FE)->pString )
- pSet->maString = *(*FE)->pString;
+ else if ( (*FE)->xString )
+ pSet->maString = *(*FE)->xString;
}
else
{
@@ -7011,11 +7006,11 @@ PPTTextObj::PPTTextObj( SvStream& rIn, SdrPowerPointImport& rSdrPowerPointImport
PPTCharPropSet* pCurrent = aCharPropList[ nIdx ];
sal_Int32 nNextStringLen = pCurrent->maString.getLength();
- DBG_ASSERT( (*FE)->pField1, "missing field!" );
- if (!(*FE)->pField1)
+ DBG_ASSERT( (*FE)->xField1, "missing field!" );
+ if (!(*FE)->xField1)
break;
- const SvxURLField* pField = static_cast<const SvxURLField*>((*FE)->pField1->GetField());
+ const SvxURLField* pField = static_cast<const SvxURLField*>((*FE)->xField1->GetField());
pCurrent->mbIsHyperlink = true;
pCurrent->mnHylinkOrigColor = pCurrent->mpImplPPTCharPropSet->mnColor;
@@ -7061,8 +7056,7 @@ PPTTextObj::PPTTextObj( SvStream& rIn, SdrPowerPointImport& rSdrPowerPointImport
}
nIdx++;
}
- delete (*FE)->pField1;
- (*FE)->pField1 = nullptr;
+ (*FE)->xField1.reset();
if ( pBefCPS )
{