Skip to content

Commit d814fe9

Browse files
codebytererichardlau
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 ac3a390 commit d814fe9

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

‎src/node_metadata.cc

+11-2
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,23 @@ Metadata metadata;
4343

4444
#if HAVE_OPENSSL
4545
static constexpr size_t search(const char* s, char c, size_t n = 0) {
46-
return *s == c ? n : search(s + 1, c, n + 1);
46+
return *s == '\0' ? n : (*s == c ? n : search(s + 1, c, n + 1));
4747
}
4848

4949
static inline std::string GetOpenSSLVersion() {
5050
// sample openssl version string format
5151
// for reference: "OpenSSL 1.1.0i 14 Aug 2018"
5252
const char* version = OpenSSL_version(OPENSSL_VERSION);
53-
const size_t start = search(version, ' ') + 1;
53+
const size_t first_space = search(version, ' ');
54+
55+
// When Node.js is linked to an alternative library implementing the
56+
// OpenSSL API e.g. BoringSSL, the version string may not match the
57+
// expected pattern. In this case just return “0.0.0” as placeholder.
58+
if (version[first_space] == '\0') {
59+
return "0.0.0";
60+
}
61+
62+
const size_t start = first_space + 1;
5463
const size_t len = search(&version[start], ' ');
5564
return std::string(version, start, len);
5665
}

0 commit comments

Comments
 (0)