GeezerVison is showing github.com — src: account for OpenSSL unexpected version · nodejs/node@b52c2ff
File tree
Expand file treeCollapse file tree
Open diff view settings
Expand file treeCollapse file tree
Open diff view settings
Collapse file
Copy file name to clipboardExpand all lines: src/node_metadata.cc +11-2Lines changed: 11 additions & 2 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -52,14 +52,23 @@ Metadata metadata; |
52 | 52 |
|
53 | 53 | #if HAVE_OPENSSL |
54 | 54 | 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)); |
56 | 56 | } |
57 | 57 |
|
58 | 58 | static inline std::string GetOpenSSLVersion() { |
59 | 59 | // sample openssl version string format |
60 | 60 | // for reference: "OpenSSL 1.1.0i 14 Aug 2018" |
61 | 61 | 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; |
63 | 72 | const size_t len = search(&version[start], ' '); |
64 | 73 | return std::string(version, start, len); |
65 | 74 | } |
|