Kaydet (Commit) ad5a6b4d authored tarafından Caolán McNamara's avatar Caolán McNamara

fix leak in HeaderFooterTabPage seen examining coverity#1371205

In the case that the field data is not a SvxDateTimeField or SvxDateField
then the old "aFieldInfo.pFieldItem = nullptr" call will mean that
the pFieldItem is leaked for that element.

The only thing needed later is the existance of a date field, and the field's
position, so encode those two facts as a bool and EPosition and
stop abusing aFieldInfo.pFieldItem to serve as a flag

Change-Id: I6a1c46d32406dbd6865cfcf6d23a3863bada6810
üst dad2f144
...@@ -627,35 +627,38 @@ void HeaderFooterTabPage::GetOrSetDateTimeLanguage( LanguageType &rLanguage, boo ...@@ -627,35 +627,38 @@ void HeaderFooterTabPage::GetOrSetDateTimeLanguage( LanguageType &rLanguage, boo
if( pOPO ) if( pOPO )
pOutl->SetText( *pOPO ); pOutl->SetText( *pOPO );
EFieldInfo aFieldInfo; EPosition aDateFieldPosition;
aFieldInfo.pFieldItem = nullptr; bool bHasDateFieldItem = false;
sal_Int32 nParaCount = pEdit->GetParagraphCount(); sal_Int32 nParaCount = pEdit->GetParagraphCount();
sal_Int32 nPara; for (sal_Int32 nPara = 0; (nPara < nParaCount) && !bHasDateFieldItem; ++nPara)
for( nPara = 0; (nPara < nParaCount) && (aFieldInfo.pFieldItem == nullptr); nPara++ )
{ {
sal_uInt16 nFieldCount = pEdit->GetFieldCount( nPara ); sal_uInt16 nFieldCount = pEdit->GetFieldCount(nPara);
sal_uInt16 nField; for (sal_uInt16 nField = 0; (nField < nFieldCount) && !bHasDateFieldItem; ++nField)
for( nField = 0; (nField < nFieldCount) && (aFieldInfo.pFieldItem == nullptr); nField++ )
{ {
aFieldInfo = pEdit->GetFieldInfo( nPara, nField ); EFieldInfo aFieldInfo = pEdit->GetFieldInfo(nPara, nField);
if( aFieldInfo.pFieldItem ) if (aFieldInfo.pFieldItem)
{ {
const SvxFieldData* pFieldData = aFieldInfo.pFieldItem->GetField(); const SvxFieldData* pFieldData = aFieldInfo.pFieldItem->GetField();
if( pFieldData && ( dynamic_cast< const SvxDateTimeField *>( pFieldData ) != nullptr || dynamic_cast< const SvxDateField *>( pFieldData ) != nullptr)) if (dynamic_cast<const SvxDateTimeField*>(pFieldData) != nullptr ||
dynamic_cast<const SvxDateField*>(pFieldData) != nullptr)
{ {
bHasDateFieldItem = true;
aDateFieldPosition = aFieldInfo.aPosition;
break; break;
} }
} }
aFieldInfo.pFieldItem = nullptr;
} }
} }
if( aFieldInfo.pFieldItem != nullptr ) if (bHasDateFieldItem)
{ {
if( bSet ) if( bSet )
{ {
SfxItemSet aSet( pEdit->GetAttribs( aFieldInfo.aPosition.nPara, aFieldInfo.aPosition.nIndex, aFieldInfo.aPosition.nIndex+1, GetAttribsFlags::CHARATTRIBS ) ); SfxItemSet aSet(pEdit->GetAttribs(aDateFieldPosition.nPara,
aDateFieldPosition.nIndex,
aDateFieldPosition.nIndex+1,
GetAttribsFlags::CHARATTRIBS));
SvxLanguageItem aItem( rLanguage, EE_CHAR_LANGUAGE ); SvxLanguageItem aItem( rLanguage, EE_CHAR_LANGUAGE );
aSet.Put( aItem ); aSet.Put( aItem );
...@@ -666,7 +669,8 @@ void HeaderFooterTabPage::GetOrSetDateTimeLanguage( LanguageType &rLanguage, boo ...@@ -666,7 +669,8 @@ void HeaderFooterTabPage::GetOrSetDateTimeLanguage( LanguageType &rLanguage, boo
SvxLanguageItem aItemCTL( rLanguage, EE_CHAR_LANGUAGE_CTL ); SvxLanguageItem aItemCTL( rLanguage, EE_CHAR_LANGUAGE_CTL );
aSet.Put( aItemCTL ); aSet.Put( aItemCTL );
ESelection aSel( aFieldInfo.aPosition.nPara, aFieldInfo.aPosition.nIndex, aFieldInfo.aPosition.nPara, aFieldInfo.aPosition.nIndex+1 ); ESelection aSel(aDateFieldPosition.nPara, aDateFieldPosition.nIndex,
aDateFieldPosition.nPara, aDateFieldPosition.nIndex+1 );
pEdit->QuickSetAttribs( aSet, aSel ); pEdit->QuickSetAttribs( aSet, aSel );
pObj->SetOutlinerParaObject( pOutl->CreateParaObject() ); pObj->SetOutlinerParaObject( pOutl->CreateParaObject() );
...@@ -674,7 +678,8 @@ void HeaderFooterTabPage::GetOrSetDateTimeLanguage( LanguageType &rLanguage, boo ...@@ -674,7 +678,8 @@ void HeaderFooterTabPage::GetOrSetDateTimeLanguage( LanguageType &rLanguage, boo
} }
else else
{ {
rLanguage = pOutl->GetLanguage( aFieldInfo.aPosition.nPara, aFieldInfo.aPosition.nIndex ); rLanguage = pOutl->GetLanguage(aDateFieldPosition.nPara,
aDateFieldPosition.nIndex );
} }
} }
......
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