diff --git a/src/node.cc b/src/node.cc index cd9de349bc70e9..41c8d6ab1b4385 100644 --- a/src/node.cc +++ b/src/node.cc @@ -237,24 +237,7 @@ class NodeTraceStateObserver : trace_process->SetString("napi", node_napi_version); #if HAVE_OPENSSL - // Stupid code to slice out the version string. - { // NOLINT(whitespace/braces) - size_t i, j, k; - int c; - for (i = j = 0, k = sizeof(OPENSSL_VERSION_TEXT) - 1; i < k; ++i) { - c = OPENSSL_VERSION_TEXT[i]; - if ('0' <= c && c <= '9') { - for (j = i + 1; j < k; ++j) { - c = OPENSSL_VERSION_TEXT[j]; - if (c == ' ') - break; - } - break; - } - } - trace_process->SetString("openssl", - std::string(&OPENSSL_VERSION_TEXT[i], j - i)); - } + trace_process->SetString("openssl", crypto::GetOpenSSLVersion()); #endif trace_process->EndDictionary(); @@ -1764,26 +1747,10 @@ void SetupProcessObject(Environment* env, FIXED_ONE_BYTE_STRING(env->isolate(), node_napi_version)); #if HAVE_OPENSSL - // Stupid code to slice out the version string. - { // NOLINT(whitespace/braces) - size_t i, j, k; - int c; - for (i = j = 0, k = sizeof(OPENSSL_VERSION_TEXT) - 1; i < k; ++i) { - c = OPENSSL_VERSION_TEXT[i]; - if ('0' <= c && c <= '9') { - for (j = i + 1; j < k; ++j) { - c = OPENSSL_VERSION_TEXT[j]; - if (c == ' ') - break; - } - break; - } - } - READONLY_PROPERTY( - versions, - "openssl", - OneByteString(env->isolate(), &OPENSSL_VERSION_TEXT[i], j - i)); - } + READONLY_PROPERTY( + versions, + "openssl", + OneByteString(env->isolate(), crypto::GetOpenSSLVersion().c_str())); #endif // process.arch diff --git a/src/node_crypto.cc b/src/node_crypto.cc index 4cf3ac5652bc0d..fe65a882b8c051 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -5725,6 +5725,16 @@ void Initialize(Local target, #endif // OPENSSL_NO_SCRYPT } +std::string GetOpenSSLVersion() { + // sample openssl version string format + // for reference: "OpenSSL 1.1.0i 14 Aug 2018" + std::string ssl(OPENSSL_VERSION_TEXT); + size_t first = ssl.find(" "); + size_t second = ssl.find(" ", first + 1); + CHECK_GT(second, first); + return ssl.substr(first + 1, second - first - 1); +} + } // namespace crypto } // namespace node diff --git a/src/node_crypto.h b/src/node_crypto.h index 1a93ae7a47e2cf..a8e9db52486a4a 100644 --- a/src/node_crypto.h +++ b/src/node_crypto.h @@ -98,6 +98,7 @@ extern int VerifyCallback(int preverify_ok, X509_STORE_CTX* ctx); extern void UseExtraCaCerts(const std::string& file); void InitCryptoOnce(); +std::string GetOpenSSLVersion(); class SecureContext : public BaseObject { public: