summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndras Timar <andras.timar@collabora.com>2022-11-07 14:29:09 +0100
committerAndras Timar <andras.timar@collabora.com>2023-01-16 17:31:45 +0100
commit4a9cc6938b5abe59303b15cb826204035b910df3 (patch)
treef7c618b2bc170ae7a5eab2d75850a149327ba9ee
parenta53581f09b7df2b9e639318d10dd5a0aec7eb600 (diff)
NSS initialization guard
Change-Id: I61a5886d0d13eaef6a61479e35d52a85937075ed Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142385 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Henry Castro <hcastro@collabora.com>
-rw-r--r--comphelper/source/misc/hash.cxx14
-rw-r--r--onlineupdate/source/update/updater/updater.cxx13
-rw-r--r--oox/source/crypto/CryptTools.cxx12
3 files changed, 28 insertions, 11 deletions
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 ee68a8a50815..c66a04084c87 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()