[Libreoffice-commits] core.git: include/sfx2 sfx2/source sw/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Dec 18 14:30:40 UTC 2018


 include/sfx2/docinsert.hxx          |    4 ++--
 sfx2/source/doc/docinsert.cxx       |   18 ++++++++----------
 sw/source/uibase/utlui/glbltree.cxx |    9 ++++-----
 3 files changed, 14 insertions(+), 17 deletions(-)

New commits:
commit fb19a399fef73c05bbe570cb32d43ccf28d1b9c6
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Tue Dec 18 14:17:11 2018 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Tue Dec 18 15:30:16 2018 +0100

    use unique_ptr in SfxMediumList
    
    fixing leak in SwGlobalTree::DialogClosedHdl
    
    Change-Id: I4a8e883bfe62181d4e332b3a0bbb85bbb332f711
    Reviewed-on: https://gerrit.libreoffice.org/65333
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/include/sfx2/docinsert.hxx b/include/sfx2/docinsert.hxx
index 21fb1a2a9c37..d7712fb4324e 100644
--- a/include/sfx2/docinsert.hxx
+++ b/include/sfx2/docinsert.hxx
@@ -33,7 +33,7 @@ namespace weld { class Window; }
 class SfxItemSet;
 enum class FileDialogFlags;
 
-typedef ::std::vector< SfxMedium* > SfxMediumList;
+typedef ::std::vector< std::unique_ptr<SfxMedium> > SfxMediumList;
 
 namespace sfx2 {
 
@@ -67,7 +67,7 @@ public:
 
     void                    StartExecuteModal( const Link<sfx2::FileDialogHelper*,void>& _rDialogClosedLink );
     std::unique_ptr<SfxMedium> CreateMedium(char const* pFallbackHack = nullptr);
-    SfxMediumList*          CreateMediumList();
+    SfxMediumList CreateMediumList();
 };
 
 } // namespace sfx2
diff --git a/sfx2/source/doc/docinsert.cxx b/sfx2/source/doc/docinsert.cxx
index d919f317123b..7b64851e0071 100644
--- a/sfx2/source/doc/docinsert.cxx
+++ b/sfx2/source/doc/docinsert.cxx
@@ -136,16 +136,16 @@ std::unique_ptr<SfxMedium> DocumentInserter::CreateMedium(char const*const pFall
     return pMedium;
 }
 
-SfxMediumList* DocumentInserter::CreateMediumList()
+SfxMediumList DocumentInserter::CreateMediumList()
 {
-    SfxMediumList* pMediumList = new SfxMediumList;
+    SfxMediumList aMediumList;
     if (!m_nError && m_pItemSet && !m_pURLList.empty())
     {
         for (auto const& url : m_pURLList)
         {
-            SfxMedium* pMedium = new SfxMedium(
+            std::unique_ptr<SfxMedium> pMedium(new SfxMedium(
                     url, SFX_STREAM_READONLY,
-                    SfxGetpApp()->GetFilterMatcher().GetFilter4FilterName( m_sFilter ), std::unique_ptr<SfxItemSet>(m_pItemSet) );
+                    SfxGetpApp()->GetFilterMatcher().GetFilter4FilterName( m_sFilter ), std::unique_ptr<SfxItemSet>(m_pItemSet) ));
 
             pMedium->UseInteractionHandler( true );
 
@@ -155,16 +155,14 @@ SfxMediumList* DocumentInserter::CreateMediumList()
             if ( nError == ERRCODE_NONE && pFilter )
                 pMedium->SetFilter( pFilter );
             else
-                DELETEZ( pMedium );
+                pMedium.reset();
 
-            if( pMedium && CheckPasswd_Impl( nullptr, pMedium ) != ERRCODE_ABORT )
-                pMediumList->push_back( pMedium );
-            else
-                delete pMedium;
+            if( pMedium && CheckPasswd_Impl( nullptr, pMedium.get() ) != ERRCODE_ABORT )
+                aMediumList.push_back( std::move(pMedium) );
         }
     }
 
-    return pMediumList;
+    return aMediumList;
 }
 
 static void impl_FillURLList( sfx2::FileDialogHelper const * _pFileDlg, std::vector<OUString>& _rpURLList )
diff --git a/sw/source/uibase/utlui/glbltree.cxx b/sw/source/uibase/utlui/glbltree.cxx
index 28709b329ae2..575d89b2b85e 100644
--- a/sw/source/uibase/utlui/glbltree.cxx
+++ b/sw/source/uibase/utlui/glbltree.cxx
@@ -1356,13 +1356,13 @@ IMPL_LINK( SwGlobalTree, DialogClosedHdl, sfx2::FileDialogHelper*, _pFileDlg, vo
     if ( ERRCODE_NONE != _pFileDlg->GetError() )
         return;
 
-    std::unique_ptr<SfxMediumList> pMedList(m_pDocInserter->CreateMediumList());
-    if ( pMedList )
+    SfxMediumList aMedList(m_pDocInserter->CreateMediumList());
+    if ( !aMedList.empty() )
     {
-        Sequence< OUString >aFileNames( pMedList->size() );
+        Sequence< OUString >aFileNames( aMedList.size() );
         OUString* pFileNames = aFileNames.getArray();
         sal_Int32 nPos = 0;
-        for (SfxMedium* pMed : *pMedList)
+        for (std::unique_ptr<SfxMedium>& pMed : aMedList)
         {
             OUString sFileName = pMed->GetURLObject().GetMainURL( INetURLObject::DecodeMechanism::NONE )
                 + OUStringLiteral1(sfx2::cTokenSeparator)
@@ -1370,7 +1370,6 @@ IMPL_LINK( SwGlobalTree, DialogClosedHdl, sfx2::FileDialogHelper*, _pFileDlg, vo
                 + OUStringLiteral1(sfx2::cTokenSeparator);
             pFileNames[nPos++] = sFileName;
         }
-        pMedList.reset();
         InsertRegion( m_pDocContent.get(), aFileNames );
         m_pDocContent.reset();
     }


More information about the Libreoffice-commits mailing list