diff options
author | Anshul M Gupta <anshul.mgupta@rubrik.com> | 2021-12-01 00:59:13 -0800 |
---|---|---|
committer | Jens Geyer <Jens-G@users.noreply.github.com> | 2021-12-06 23:01:25 +0100 |
commit | 98be76fc033f1d66bcfd09d4a22b86e8061e89c2 (patch) | |
tree | 3875688fbcf111b4b971f079e5c28ad54b238798 | |
parent | 2853af2d02dc1c4e42175e76d5ccefe9e797c4c4 (diff) | |
download | thrift-98be76fc033f1d66bcfd09d4a22b86e8061e89c2.tar.gz |
THRIFT-5482: Fix memory leak during SSL handshake in C++ library
Client: C++
-rw-r--r-- | lib/cpp/src/thrift/transport/TSSLSocket.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/cpp/src/thrift/transport/TSSLSocket.cpp b/lib/cpp/src/thrift/transport/TSSLSocket.cpp index 665f8f6c3..dc8fcd9a6 100644 --- a/lib/cpp/src/thrift/transport/TSSLSocket.cpp +++ b/lib/cpp/src/thrift/transport/TSSLSocket.cpp @@ -152,7 +152,15 @@ void cleanupOpenSSL() { CONF_modules_unload(1); EVP_cleanup(); CRYPTO_cleanup_all_ex_data(); +#if OPENSSL_VERSION_NUMBER >= 0x10100000 + // https://www.openssl.org/docs/man1.1.1/man3/OPENSSL_thread_stop.html + OPENSSL_thread_stop(); +#else + // ERR_remove_state() was deprecated in OpenSSL 1.0.0 and ERR_remove_thread_state() + // was deprecated in OpenSSL 1.1.0; these functions and should not be used. + // https://www.openssl.org/docs/manmaster/man3/ERR_remove_state.html ERR_remove_state(0); +#endif ERR_free_strings(); mutexes.reset(); @@ -382,7 +390,15 @@ void TSSLSocket::close() { SSL_free(ssl_); ssl_ = nullptr; handshakeCompleted_ = false; +#if OPENSSL_VERSION_NUMBER >= 0x10100000 + // https://www.openssl.org/docs/man1.1.1/man3/OPENSSL_thread_stop.html + OPENSSL_thread_stop(); +#else + // ERR_remove_state() was deprecated in OpenSSL 1.0.0 and ERR_remove_thread_state() + // was deprecated in OpenSSL 1.1.0; these functions and should not be used. + // https://www.openssl.org/docs/manmaster/man3/ERR_remove_state.html ERR_remove_state(0); +#endif } TSocket::close(); } |