sc/inc/editutil.hxx | 3 +-- sc/source/core/tool/editutil.cxx | 26 ++++++-------------------- 2 files changed, 7 insertions(+), 22 deletions(-)
New commits: commit 07ba469a350052eee905e908080f98f11517af66 Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Tue Nov 12 11:59:41 2024 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Wed Nov 13 09:29:02 2024 +0100 tdf#163486: PVS: pointer not released in destructor V773 The 'pDefaults' pointer was not released in destructor. A memory leak is possible. Change-Id: I7df195d1f515b86e85993d6c0a6cf60bcaff3109 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176477 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sc/inc/editutil.hxx b/sc/inc/editutil.hxx index d05363c0b2b4..247f1cc783ae 100644 --- a/sc/inc/editutil.hxx +++ b/sc/inc/editutil.hxx @@ -109,9 +109,8 @@ class ScEnginePoolHelper { protected: rtl::Reference<SfxItemPool> m_pEnginePool; - SfxItemSet* m_pDefaults; + std::unique_ptr<SfxItemSet> m_pDefaults; bool m_bDeleteEnginePool; - bool m_bDeleteDefaults; ScEnginePoolHelper( SfxItemPool* pEnginePool, bool bDeleteEnginePool ); ScEnginePoolHelper( const ScEnginePoolHelper& rOrg ); diff --git a/sc/source/core/tool/editutil.cxx b/sc/source/core/tool/editutil.cxx index 29166d8583f3..3c3dac0ee4e9 100644 --- a/sc/source/core/tool/editutil.cxx +++ b/sc/source/core/tool/editutil.cxx @@ -523,25 +523,19 @@ ScEnginePoolHelper::ScEnginePoolHelper( SfxItemPool* pEnginePoolP, bool bDeleteEnginePoolP ) : m_pEnginePool( pEnginePoolP ), - m_pDefaults( nullptr ), - m_bDeleteEnginePool( bDeleteEnginePoolP ), - m_bDeleteDefaults( false ) + m_bDeleteEnginePool( bDeleteEnginePoolP ) { } ScEnginePoolHelper::ScEnginePoolHelper( const ScEnginePoolHelper& rOrg ) : m_pEnginePool( rOrg.m_bDeleteEnginePool ? rOrg.m_pEnginePool->Clone() : rOrg.m_pEnginePool ), - m_pDefaults( nullptr ), - m_bDeleteEnginePool( rOrg.m_bDeleteEnginePool ), - m_bDeleteDefaults( false ) + m_bDeleteEnginePool( rOrg.m_bDeleteEnginePool ) { } ScEnginePoolHelper::~ScEnginePoolHelper() { - if ( m_bDeleteDefaults ) - delete m_pDefaults; } ScEditEngineDefaulter::ScEditEngineDefaulter( SfxItemPool* pEnginePoolP, @@ -572,10 +566,7 @@ void ScEditEngineDefaulter::SetDefaults( const SfxItemSet& rSet, bool bRememberC { if ( bRememberCopy ) { - if ( m_bDeleteDefaults ) - delete m_pDefaults; - m_pDefaults = new SfxItemSet( rSet ); - m_bDeleteDefaults = true; + m_pDefaults = std::make_unique<SfxItemSet>( rSet ); } const SfxItemSet& rNewSet = bRememberCopy ? *m_pDefaults : rSet; bool bUndo = IsUndoEnabled(); @@ -594,10 +585,7 @@ void ScEditEngineDefaulter::SetDefaults( const SfxItemSet& rSet, bool bRememberC void ScEditEngineDefaulter::SetDefaults( std::unique_ptr<SfxItemSet> pSet ) { - if ( m_bDeleteDefaults ) - delete m_pDefaults; - m_pDefaults = pSet.release(); - m_bDeleteDefaults = true; + m_pDefaults = std::move(pSet); if ( m_pDefaults ) SetDefaults( *m_pDefaults, false ); } @@ -606,8 +594,7 @@ void ScEditEngineDefaulter::SetDefaultItem( const SfxPoolItem& rItem ) { if ( !m_pDefaults ) { - m_pDefaults = new SfxItemSet( GetEmptyItemSet() ); - m_bDeleteDefaults = true; + m_pDefaults = std::make_unique<SfxItemSet>( GetEmptyItemSet() ); } m_pDefaults->Put( rItem ); SetDefaults( *m_pDefaults, false ); @@ -617,8 +604,7 @@ const SfxItemSet& ScEditEngineDefaulter::GetDefaults() { if ( !m_pDefaults ) { - m_pDefaults = new SfxItemSet( GetEmptyItemSet() ); - m_bDeleteDefaults = true; + m_pDefaults = std::make_unique<SfxItemSet>( GetEmptyItemSet() ); } return *m_pDefaults; }