[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