diff --git a/frameworks/js/napi/tls/src/tls_socket.cpp b/frameworks/js/napi/tls/src/tls_socket.cpp index 36cac7107e27e8f5101abb0a0a04dfd71bec8d2d..48fcbc5e90d5c2a8ac4a03206bc1f6ace6b3cdb6 100644 --- a/frameworks/js/napi/tls/src/tls_socket.cpp +++ b/frameworks/js/napi/tls/src/tls_socket.cpp @@ -1469,26 +1469,36 @@ std::string TLSSocket::TLSSocketInternal::GetProtocol() const return PROTOCOL_TLS_V12; } -bool TLSSocket::TLSSocketInternal::SetSharedSigals() +static bool IsNumberNotZero(int &number, std::mutex &mutexForSsl, ssl_st *ssl) { - int number = 0; { - std::lock_guard lock(mutexForSsl_); - if (!ssl_) { + std::lock_guard lock(mutexForSsl); + if (!ssl) { return false; } - number = SSL_get_shared_sigalgs(ssl_, 0, nullptr, nullptr, nullptr, nullptr, nullptr); + number = SSL_get_shared_sigalgs(ssl, 0, nullptr, nullptr, nullptr, nullptr, nullptr); } if (!number) { return false; } - std::unique_lock lock(rw_mutex_); + return true; +} + +bool TLSSocket::TLSSocketInternal::SetSharedSigals() +{ + int number = 0; + if (!IsNumberNotZero(number, mutexForSsl_, ssl_)) { + return false; + } for (int i = 0; i < number; i++) { int hash_nid; int sign_nid; std::string sig_with_md; { std::lock_guard lock(mutexForSsl_); + if (!ssl_) { + return false; + } SSL_get_shared_sigalgs(ssl_, i, &sign_nid, &hash_nid, nullptr, nullptr, nullptr); } switch (sign_nid) { @@ -1516,6 +1526,7 @@ bool TLSSocket::TLSSocketInternal::SetSharedSigals() } const char *sn_hash = OBJ_nid2sn(hash_nid); sig_with_md += (sn_hash != nullptr) ? std::string(sn_hash) : SIGN_NID_UNDEF; + std::unique_lock lock(rw_mutex_); signatureAlgorithms_.push_back(sig_with_md); } return true;