comphelper/source/misc/hash.cxx                |   14 +++++++++-----
 onlineupdate/source/update/updater/updater.cxx |   13 ++++++++-----
 oox/source/crypto/CryptTools.cxx               |   12 +++++++++++-
 3 files changed, 28 insertions(+), 11 deletions(-)

New commits:
commit 632dd5889fd455c9edd2182ef1cc34b0a295447b
Author:     Andras Timar <andras.ti...@collabora.com>
AuthorDate: Mon Nov 7 14:29:09 2022 +0100
Commit:     Henry Castro <hcas...@collabora.com>
CommitDate: Mon Nov 14 12:36:10 2022 +0100

    NSS initialization guard
    
    Change-Id: I61a5886d0d13eaef6a61479e35d52a85937075ed
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142385
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Henry Castro <hcas...@collabora.com>

diff --git a/comphelper/source/misc/hash.cxx b/comphelper/source/misc/hash.cxx
index 9fab6028a659..0fb2ef28c461 100644
--- a/comphelper/source/misc/hash.cxx
+++ b/comphelper/source/misc/hash.cxx
@@ -77,11 +77,15 @@ struct HashImpl
     {
 
 #if USE_TLS_NSS
-        auto const e = NSS_NoDB_Init(nullptr);
-        if (e != SECSuccess) {
-            PRErrorCode error = PR_GetError();
-            const char* errorText = PR_ErrorToName(error);
-            throw css::uno::RuntimeException("NSS_NoDB_Init failed with " + 
OUString(errorText, strlen(errorText), RTL_TEXTENCODING_UTF8) + " (" + 
OUString::number((int) error) + ")");
+        if (!NSS_IsInitialized())
+        {
+            auto const e = NSS_NoDB_Init(nullptr);
+            if (e != SECSuccess)
+            {
+                PRErrorCode error = PR_GetError();
+                const char* errorText = PR_ErrorToName(error);
+                throw css::uno::RuntimeException("NSS_NoDB_Init failed with " 
+ OUString(errorText, strlen(errorText), RTL_TEXTENCODING_UTF8) + " (" + 
OUString::number((int) error) + ")");
+            }
         }
         mpContext = HASH_Create(getNSSType());
         HASH_Begin(mpContext);
diff --git a/onlineupdate/source/update/updater/updater.cxx 
b/onlineupdate/source/update/updater/updater.cxx
index 54750afb4218..467f0b67cd1f 100644
--- a/onlineupdate/source/update/updater/updater.cxx
+++ b/onlineupdate/source/update/updater/updater.cxx
@@ -2919,12 +2919,15 @@ int NS_main(int argc, NS_tchar **argv)
     // need to initialize NSS at all there.
     // Otherwise, minimize the amount of NSS we depend on by avoiding all the 
NSS
     // databases.
-    if (NSS_NoDB_Init(NULL) != SECSuccess)
+    if (!NSS_IsInitialized())
     {
-        PRErrorCode error = PR_GetError();
-        fprintf(stderr, "Could not initialize NSS: %s (%d)",
-                PR_ErrorToName(error), (int) error);
-        _exit(1);
+        if (NSS_NoDB_Init(NULL) != SECSuccess)
+        {
+            PRErrorCode error = PR_GetError();
+            fprintf(stderr, "Could not initialize NSS: %s (%d)",
+                    PR_ErrorToName(error), (int) error);
+            _exit(1);
+        }
     }
 #endif
 
diff --git a/oox/source/crypto/CryptTools.cxx b/oox/source/crypto/CryptTools.cxx
index 77b6f8c11988..606c5bfa9e96 100644
--- a/oox/source/crypto/CryptTools.cxx
+++ b/oox/source/crypto/CryptTools.cxx
@@ -21,6 +21,7 @@
 
 #if USE_TLS_NSS
 #include <nss.h>
+#include <nspr.h>
 #include <pk11pub.h>
 #endif // USE_TLS_NSS
 
@@ -167,7 +168,16 @@ struct CryptoImpl
         , mWrapKey(nullptr)
     {
         // Initialize NSS, database functions are not needed
-        NSS_NoDB_Init(nullptr);
+        if (!NSS_IsInitialized())
+        {
+            auto const e = NSS_NoDB_Init(nullptr);
+            if (e != SECSuccess)
+            {
+                PRErrorCode error = PR_GetError();
+                const char* errorText = PR_ErrorToName(error);
+                throw css::uno::RuntimeException("NSS_NoDB_Init failed with " 
+ OUString(errorText, strlen(errorText), RTL_TEXTENCODING_UTF8) + " (" + 
OUString::number((int) error) + ")");
+            }
+        }
     }
 
     ~CryptoImpl()

Reply via email to