[Libreoffice-commits] core.git: Branch 'libreoffice-7-2' - sfx2/inc sfx2/source

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Fri Jul 2 07:41:12 UTC 2021


 sfx2/inc/recentdocsview.hxx            |    4 +++-
 sfx2/source/control/recentdocsview.cxx |    8 ++++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

New commits:
commit a80e607b65662393f93e896ba7925f67150149da
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Thu Jun 17 13:38:07 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Fri Jul 2 09:40:37 2021 +0200

    fix potential write-after-free in RecentDocsView
    
    spotted while running a valgrind session
    
    Change-Id: I32c55ae2cc4b2d5abedca24c2f747aaa4183b3d7
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117382
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
    (cherry picked from commit 2176084192dc46a1ef5d6dd79effa5cd5d1dcca2)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118255

diff --git a/sfx2/inc/recentdocsview.hxx b/sfx2/inc/recentdocsview.hxx
index 77c350d40b83..b87a0cce679c 100644
--- a/sfx2/inc/recentdocsview.hxx
+++ b/sfx2/inc/recentdocsview.hxx
@@ -17,6 +17,7 @@
 #include <com/sun/star/util/URL.hpp>
 #include <com/sun/star/beans/PropertyValue.hpp>
 
+struct ImplSVEvent;
 namespace com::sun::star::frame { class XDispatch; }
 
 namespace sfx2
@@ -92,7 +93,7 @@ private:
 
     bool isAcceptedFile(const OUString &rURL) const;
 
-    DECL_STATIC_LINK( RecentDocsView, ExecuteHdl_Impl, void*, void );
+    DECL_LINK( ExecuteHdl_Impl, void*, void );
 
     tools::Long mnItemMaxSize;
     size_t mnLastMouseDownItem;
@@ -103,6 +104,7 @@ private:
     OUString maWelcomeLine2;
 
     sfx2::LoadRecentFile* mpLoadRecentFile;
+    ImplSVEvent* m_nExecuteHdlId;
 };
 
 } // namespace sfx2
diff --git a/sfx2/source/control/recentdocsview.cxx b/sfx2/source/control/recentdocsview.cxx
index 137591a43991..0b01603d3914 100644
--- a/sfx2/source/control/recentdocsview.cxx
+++ b/sfx2/source/control/recentdocsview.cxx
@@ -130,6 +130,7 @@ RecentDocsView::RecentDocsView(std::unique_ptr<weld::ScrolledWindow> xWindow, st
     , maWelcomeLine1(SfxResId(STR_WELCOME_LINE1))
     , maWelcomeLine2(SfxResId(STR_WELCOME_LINE2))
     , mpLoadRecentFile(nullptr)
+    , m_nExecuteHdlId(nullptr)
 {
     tools::Rectangle aScreen = Application::GetScreenPosSizePixel(Application::GetDisplayBuiltInScreen());
     mnItemMaxSize = std::min(aScreen.GetWidth(),aScreen.GetHeight()) > 800 ? 256 : 192;
@@ -148,6 +149,8 @@ RecentDocsView::RecentDocsView(std::unique_ptr<weld::ScrolledWindow> xWindow, st
 
 RecentDocsView::~RecentDocsView()
 {
+    Application::RemoveUserEvent(m_nExecuteHdlId);
+    m_nExecuteHdlId = nullptr;
     if (mpLoadRecentFile)
     {
         mpLoadRecentFile->pView = nullptr;
@@ -408,7 +411,7 @@ void RecentDocsView::PostLoadRecentUsedFile(LoadRecentFile* pLoadRecentFile)
 {
     assert(!mpLoadRecentFile);
     mpLoadRecentFile = pLoadRecentFile;
-    Application::PostUserEvent(LINK(nullptr, RecentDocsView, ExecuteHdl_Impl), pLoadRecentFile);
+    m_nExecuteHdlId = Application::PostUserEvent(LINK(this, RecentDocsView, ExecuteHdl_Impl), pLoadRecentFile);
 }
 
 void RecentDocsView::DispatchedLoadRecentUsedFile()
@@ -416,8 +419,9 @@ void RecentDocsView::DispatchedLoadRecentUsedFile()
     mpLoadRecentFile = nullptr;
 }
 
-IMPL_STATIC_LINK( RecentDocsView, ExecuteHdl_Impl, void*, p, void )
+IMPL_LINK( RecentDocsView, ExecuteHdl_Impl, void*, p, void )
 {
+    m_nExecuteHdlId = nullptr;
     LoadRecentFile* pLoadRecentFile = static_cast<LoadRecentFile*>(p);
     try
     {


More information about the Libreoffice-commits mailing list