diff options
author | Michael Stahl <michael.stahl@allotropia.de> | 2021-10-29 21:53:31 +0200 |
---|---|---|
committer | Michael Stahl <michael.stahl@allotropia.de> | 2021-11-01 19:02:16 +0100 |
commit | d4acfea2fed8f999347e49ed76c3f5115952df5c (patch) | |
tree | 92186a0808a045e6377721b7f6f28af27abe1a9f /include/opencl | |
parent | 4b7f8f7cf3146317ae2770a766efe48f7a295f72 (diff) |
ucb: webdav-curl: rewrite authentication loop for reentrancy
Surprisingly calling authenticate() can lead to a reentrant call
via event loop, which fortunately deadlocks with non-recusive mutex,
or we'd have a much more difficult to debug problem:
5 std::unique_lock<std::mutex>::unique_lock()
7 http_dav_ucp::CurlProcessor::PropFind()
8 http_dav_ucp::CurlSession::PROPFIND() (this=0x391fe80, rURIReference="/testL.odt", depth=http_dav_ucp::DAVZERO, o_rResourceInfos=std::__debug::vector of length 0, capacity 0, rEnv=...)
9 http_dav_ucp::DAVResourceAccess::PROPFIND() (this=0xab3bb00, nDepth=http_dav_ucp::DAVZERO, rResInfo=std::__debug::vector of length 0, capacity 0, xEnv=uno::Reference to (class ucbhelper::CommandEnvironment *) 0x390b578)
10 http_dav_ucp::Content::getProperties() (this=0xa8ba9a0, xEnv=uno::Reference to (class ucbhelper::CommandEnvironment *) 0x390b578)
15 SfxBaseModel::isVersionable() (this=0x7159c90)
19 SfxBindings::Update_Impl(SfxStateCache&)
24 Timer::Invoke() (this=0x7394708)
30 g_main_loop_run ()
35 (anonymous namespace)::executeMasterPasswordDialog()
40 (anonymous namespace)::UUIInteractionHandler::handle()
41 PasswordContainer::RequestPasswordFromUser()
42 PasswordContainer::GetMasterPassword()
47 PasswordContainer::find()
48 uui::PasswordContainerHelper::handleAuthenticationRequest()
57 ucbhelper::InterceptedInteraction::handle()
58 http_dav_ucp::DAVAuthListener_Impl::authenticate()
59 http_dav_ucp::CurlProcessor::ProcessRequestImpl()
60 http_dav_ucp::CurlProcessor::ProcessRequest()
61 http_dav_ucp::CurlProcessor::PropFind()
62 http_dav_ucp::CurlSession::PROPFIND() (this=0x391fe80, rURIReference="/testL.odt", depth=http_dav_ucp::DAVZERO, o_rResourceInfos=std::__debug::vector of length 0, capacity 0, rEnv=...)
63 http_dav_ucp::DAVResourceAccess::PROPFIND() (this=0xab8c060, nDepth=http_dav_ucp::DAVZERO, rResInfo=std::__debug::vector of length 0, capacity 0, xEnv=uno::Reference to (class ucbhelper::CommandEnvironment *) 0x390b578)
64 http_dav_ucp::Content::getProperties() (this=0xa8ba9a0, xEnv=uno::Reference to (class ucbhelper::CommandEnvironment *) 0x390b578)
67 ucbhelper::PropertySetInfo::hasPropertyByName() (this=0xa8d7a20, Name="TitleOnServer")
68 SfxBaseModel::getTitle()
74 framework::TitleHelper::impl_updateTitle()
75 framework::TitleHelper::documentEventOccured()
78 SfxBaseModel::postEvent_Impl() (this=0x7159c90, aName="OnModeChanged", xController=empty uno::Reference)
79 SfxBaseModel::Notify()
80 SfxBroadcaster::Broadcast()
81 SfxObjectShell::SetModalMode_Impl()
82 SfxViewFrame::SetModalMode(bool)
83 SfxFrameWindow_Impl::ModalHierarchyHdl()
86 SalFrame::NotifyModalHierarchy()
88 SalGtkFilePicker::execute()
92 ModelData_Impl::OutputFileDialog()
93 SfxStoringHelper::GUIStoreModel()
Need to move authentication loop to the outer function, so that all the
option guards in ProcessRequestImpl() are reset/set again, and also
delay setting the option guards from the various callers so they can be
reset in ProcessRequest() before authenticate().
Change-Id: Id697b1459f94f80fc58cee7768c2bd388369b29c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124452
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Diffstat (limited to 'include/opencl')
0 files changed, 0 insertions, 0 deletions