sfx2/inc/recentdocsview.hxx | 4 +++- sfx2/source/control/recentdocsview.cxx | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-)
New commits: commit a4c13e7ee7534b8b5c0a6849deba3a86f4826479 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Thu Jun 17 13:38:07 2021 +0200 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Sat Jul 3 15:33:27 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.gran...@collabora.co.uk> (cherry picked from commit 2176084192dc46a1ef5d6dd79effa5cd5d1dcca2) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118256 (cherry picked from commit 2b848d7dad2e7e1c8efce5b23eafedff387f00c2) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118266 Reviewed-by: Michael Stahl <michael.st...@allotropia.de> Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/sfx2/inc/recentdocsview.hxx b/sfx2/inc/recentdocsview.hxx index c8db9bc3c043..a6e2f86a155a 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 958785a12394..e74c354bef92 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; @@ -401,7 +404,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() @@ -409,8 +412,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 { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits