Skip to content

Commit

Permalink
src: account for OpenSSL unexpected version
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
codebytere authored and richardlau committed Sep 27, 2024
1 parent ac3a390 commit d814fe9
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions src/node_metadata.cc
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,23 @@ Metadata metadata;

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

static inline std::string GetOpenSSLVersion() {
// sample openssl version string format
// for reference: "OpenSSL 1.1.0i 14 Aug 2018"
const char* version = OpenSSL_version(OPENSSL_VERSION);
const size_t start = search(version, ' ') + 1;
const size_t first_space = search(version, ' ');

// When Node.js is linked to an alternative library implementing the
// OpenSSL API e.g. BoringSSL, the version string may not match the
// expected pattern. In this case just return “0.0.0” as placeholder.
if (version[first_space] == '\0') {
return "0.0.0";
}

const size_t start = first_space + 1;
const size_t len = search(&version[start], ' ');
return std::string(version, start, len);
}
Expand Down

0 comments on commit d814fe9

Please sign in to comment.