xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx |   15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

New commits:
commit 32ef7cea779ccea9b24ab4776f3069d3a80dd7ed
Author:     Stephan Bergmann <stephan.bergm...@allotropia.de>
AuthorDate: Mon Jan 29 20:52:20 2024 +0100
Commit:     Stephan Bergmann <stephan.bergm...@allotropia.de>
CommitDate: Tue Jan 30 07:38:28 2024 +0100

    tdf#159307 Fix GetCertificateManager
    
    ...which had always cut off an existing path ever since
    92b6ffcd9f687cc54a0fc3801ca85c7e4d77512f "Allow selecting a custom 
certificate
    manager", for reasons that are unclear to me.
    
    So if an existing setting contains at least one slash (or backslash, on
    Windows), try to use it as-is; otherwise, keep searching for it in aPath.  
(And,
    in any case, make sure to report back the given value in sExecutable.)
    
    Change-Id: I8b2b6ac7a449d7afd02e029ff46d4c79e6b824e1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162703
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <stephan.bergm...@allotropia.de>

diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx 
b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
index 3cd13c6060cf..f2bb37241b7c 100644
--- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
+++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
@@ -154,16 +154,23 @@ void GetCertificateManager(OUString& sExecutable)
     OUString aCetMgrConfig = 
officecfg::Office::Common::Security::Scripting::CertMgrPath::get();
     if (!aCetMgrConfig.isEmpty())
     {
+        if (aCetMgrConfig.indexOf('/') != -1
 #ifdef _WIN32
-        sal_Int32 nLastBackslashIndex = aCetMgrConfig.lastIndexOf('\');
-#else
-        sal_Int32 nLastBackslashIndex = aCetMgrConfig.lastIndexOf('/');
+            || aCetMgrConfig.indexOf('\') != -1
 #endif
+           )
+        {
+            sExecutable = aCetMgrConfig;
+            return;
+        }
         osl::FileBase::RC searchError = osl::File::searchFileURL(
-            aCetMgrConfig.copy(0, nLastBackslashIndex + 1), aPath,
+            aCetMgrConfig, aPath,
             aFoundGUIServer);
         if (searchError == osl::FileBase::E_None)
+        {
+            osl::File::getSystemPathFromFileURL(aFoundGUIServer, sExecutable);
             return;
+        }
     }
 
     for (const auto& rServer: aGUIServers)

Reply via email to