diff options
| author | selsta <selsta@sent.at> | 2026-04-21 13:33:42 +0200 |
|---|---|---|
| committer | selsta <selsta@sent.at> | 2026-04-21 13:41:02 +0200 |
| commit | b635e675e699f87d0d028f6f3f6e6a2ea2c05104 (patch) | |
| tree | e13e6c15516d60f6d342cd47d970353c1302c5b0 /src/wallet | |
| parent | ecb1b7148e8ce3e5bc2b98cd5f93629d61486fc5 (diff) | |
| download | monzero-core-b635e675e699f87d0d028f6f3f6e6a2ea2c05104.tar.gz monzero-core-b635e675e699f87d0d028f6f3f6e6a2ea2c05104.tar.xz monzero-core-b635e675e699f87d0d028f6f3f6e6a2ea2c05104.zip | |
wallet_rpc_server: fix ssl_allowed_fingerprints hex parsing
Diffstat (limited to 'src/wallet')
| -rw-r--r-- | src/wallet/wallet_rpc_server.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/wallet/wallet_rpc_server.cpp b/src/wallet/wallet_rpc_server.cpp index bca2d975f..99e3462a2 100644 --- a/src/wallet/wallet_rpc_server.cpp +++ b/src/wallet/wallet_rpc_server.cpp @@ -4694,10 +4694,25 @@ namespace tools ssl_allowed_fingerprints.reserve(req.ssl_allowed_fingerprints.size()); for (const std::string &fp: req.ssl_allowed_fingerprints) { - ssl_allowed_fingerprints.push_back({}); - std::vector<uint8_t> &v = ssl_allowed_fingerprints.back(); - for (auto c: fp) - v.push_back(c); + std::vector<uint8_t> decoded; + try + { + decoded = epee::from_hex_locale::to_vector(fp); + } + catch (const std::exception &) + { + er.code = WALLET_RPC_ERROR_CODE_NO_DAEMON_CONNECTION; + er.message = "ssl_allowed_fingerprints[] entries must be hex-encoded SHA-256 values"; + return false; + } + + if (decoded.size() != SSL_FINGERPRINT_SIZE) + { + er.code = WALLET_RPC_ERROR_CODE_NO_DAEMON_CONNECTION; + er.message = "Each ssl_allowed_fingerprints[] entry must decode to exactly " BOOST_PP_STRINGIZE(SSL_FINGERPRINT_SIZE) " bytes"; + return false; + } + ssl_allowed_fingerprints.emplace_back(std::move(decoded)); } epee::net_utils::ssl_options_t ssl_options = epee::net_utils::ssl_support_t::e_ssl_support_enabled; |
