Skip to content

Commit b52c2ff

Browse files
codebyteretargos
authored andcommitted
src: account for OpenSSL unexpected version
PR-URL: #54038 Reviewed-By: Richard Lau <[email protected]> Reviewed-By: Joyee Cheung <[email protected]> Reviewed-By: Mohammed Keyvanzadeh <[email protected]> Reviewed-By: Franziska Hinkelmann <[email protected]> Reviewed-By: Yagiz Nizipli <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Luigi Pinca <[email protected]>
1 parent 33633ee commit b52c2ff

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

src/node_metadata.cc

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,23 @@ Metadata metadata;
5252

5353
#if HAVE_OPENSSL
5454
static constexpr size_t search(const char* s, char c, size_t n = 0) {
55-
return *s == c ? n : search(s + 1, c, n + 1);
55+
return *s == '\0' ? n : (*s == c ? n : search(s + 1, c, n + 1));
5656
}
5757

5858
static inline std::string GetOpenSSLVersion() {
5959
// sample openssl version string format
6060
// for reference: "OpenSSL 1.1.0i 14 Aug 2018"
6161
const char* version = OpenSSL_version(OPENSSL_VERSION);
62-
const size_t start = search(version, ' ') + 1;
62+
const size_t first_space = search(version, ' ');
63+
64+
// When Node.js is linked to an alternative library implementing the
65+
// OpenSSL API e.g. BoringSSL, the version string may not match the
66+
// expected pattern. In this case just return “0.0.0” as placeholder.
67+
if (version[first_space] == '\0') {
68+
return "0.0.0";
69+
}
70+
71+
const size_t start = first_space + 1;
6372
const size_t len = search(&version[start], ' ');
6473
return std::string(version, start, len);
6574
}

0 commit comments

Comments
 (0)