[Libreoffice-commits] core.git: Branch 'libreoffice-7-1' - fpicker/source

Samuel Mehrbrodt (via logerrit) logerrit at kemper.freedesktop.org
Thu Feb 25 23:30:23 UTC 2021


 fpicker/source/win32/VistaFilePickerImpl.cxx |   16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

New commits:
commit f580ea54bddee91e85ef018be286b60b48935681
Author:     Samuel Mehrbrodt <samuel.mehrbrodt at allotropia.de>
AuthorDate: Tue Feb 23 10:28:18 2021 +0100
Commit:     Thorsten Behrens <thorsten.behrens at allotropia.de>
CommitDate: Fri Feb 26 00:29:44 2021 +0100

    Possible race between retrieving and using parent window
    
    Filepicker was called from extension, parent window was initialized in constructor
    with current top level window (extension dialog).
    Extension dialog got closed before file picker was shown in some cases,
    causing Show() method to fail
    
    Change-Id: Ie41585e6b05511ba2dff265374348b6041e9fa87
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111378
    Tested-by: Jenkins
    Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt at allotropia.de>
    (cherry picked from commit 8c62c2fb88a7a82939ad3b5c7355c93a41b76d5b)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111420
    Reviewed-by: Thorsten Behrens <thorsten.behrens at allotropia.de>

diff --git a/fpicker/source/win32/VistaFilePickerImpl.cxx b/fpicker/source/win32/VistaFilePickerImpl.cxx
index d6e10115ac82..c9a29a194f1b 100644
--- a/fpicker/source/win32/VistaFilePickerImpl.cxx
+++ b/fpicker/source/win32/VistaFilePickerImpl.cxx
@@ -187,7 +187,7 @@ VistaFilePickerImpl::VistaFilePickerImpl()
     , m_iEventHandler(new VistaFilePickerEventHandler(this))
     , m_bInExecute   (false)
     , m_bWasExecuted (false)
-    , m_hParentWindow(choose_parent_window())
+    , m_hParentWindow(nullptr)
     , m_sDirectory   ()
     , m_sFilename    ()
     , mnNbCallCoInitializeExForReinit(0)
@@ -1019,19 +1019,25 @@ void VistaFilePickerImpl::impl_sta_ShowDialogModal(const RequestRef& rRequest)
         }
     }
 
-
     HRESULT hResult = E_FAIL;
+    HWND hParentWindow;
+    {
+        osl::MutexGuard aLock(m_aMutex);
+        // Note that there is a potential race between retrieving and
+        // using parent window (window might get destroyed)
+        hParentWindow = m_hParentWindow ? m_hParentWindow : choose_parent_window();
+    }
     try
     {
         // show dialog and wait for user decision
         if (iOpen.is())
-            hResult = iOpen->Show( m_hParentWindow ); // parent window needed
+            hResult = iOpen->Show( hParentWindow ); // parent window needed
         else
         if (iSave.is())
-            hResult = iSave->Show( m_hParentWindow ); // parent window needed
+            hResult = iSave->Show( hParentWindow ); // parent window needed
         else
         if (iPick.is())
-            hResult = iPick->Show( m_hParentWindow ); // parent window needed
+            hResult = iPick->Show( hParentWindow ); // parent window needed
     }
     catch(...)
     {}


More information about the Libreoffice-commits mailing list