From 2da755135acdc0d7899a4623f9ff15b188fd744a Mon Sep 17 00:00:00 2001 From: Davide Beatrici Date: Thu, 12 Apr 2018 00:12:05 +0200 Subject: [PATCH] Encrypt: improve FreeOpenSSLThreadState() and FreeCryptLibrary(), in order to clean up the library correctly https://wiki.openssl.org/index.php/Library_Initialization#Cleanup --- src/Mayaqua/Encrypt.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/Mayaqua/Encrypt.c b/src/Mayaqua/Encrypt.c index 381d1c57..5cc247f1 100644 --- a/src/Mayaqua/Encrypt.c +++ b/src/Mayaqua/Encrypt.c @@ -3643,9 +3643,14 @@ void Rand(void *buf, UINT size) // Delete a thread-specific information that OpenSSL has holded void FreeOpenSSLThreadState() { + CRYPTO_cleanup_all_ex_data(); ERR_remove_state(0); } +#if OPENSSL_VERSION_NUMBER < 0x10100000L +#define SSL_COMP_free_compression_methods() (sk_free(SSL_COMP_get_compression_methods())) +#endif + // Release the Crypt library void FreeCryptLibrary() { @@ -3655,6 +3660,17 @@ void FreeCryptLibrary() openssl_lock = NULL; // RAND_Free_For_SoftEther(); OpenSSL_FreeLock(); + + FIPS_mode_set(0); + ENGINE_cleanup(); + CONF_modules_unload(1); + EVP_cleanup(); + + FreeOpenSSLThreadState(); + + ERR_free_strings(); + + SSL_COMP_free_compression_methods(); } // Initialize the Crypt library