Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: undefined behaviour in evo RPC calls of RPCHelpMan
The implementation of RPC has been refactored in bitcoin significantly with using RPCHelpMan, see multiple PR, such as bitcoin#1853, bitcoin#19528, etc Backporting them and appliying same refactoring to Dash Core caused undefined behaviour, particularly dashpay#6072 For example, in this code the local variable `use_legacy` will be used after `protx_update_registrar_wrapper`, when executor will be called. static RPCHelpMan protx_update_registrar_wrapper(const bool use_legacy) { std::string rpc_name = use_legacy ? "update_registrar_legacy" : "update_registrar"; std::string rpc_full_name = std::string("protx ").append(rpc_name); std::string pubkey_operator = use_legacy ? "\"0532646990082f4fd639f90387b1551f2c7c39d37392cb9055a06a7e85c1d23692db8f87f827886310bccc1e29db9aee\"" : "\"8532646990082f4fd639f90387b1551f2c7c39d37392cb9055a06a7e85c1d23692db8f87f827886310bccc1e29db9aee\""; std::string rpc_example = rpc_name.append(" \"0123456701234567012345670123456701234567012345670123456701234567\" ").append(pubkey_operator).append(" \"" + EXAMPLE_ADDRESS[1] + "\""); return RPCHelpMan{rpc_full_name, <...> RPCResult{ RPCResult::Type::STR_HEX, "txid", "The transaction id" }, RPCExamples{ HelpExampleCli("protx", rpc_example) }, [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue { <...> ptx.nVersion = specific_legacy_bls_scheme ? CProUpRegTx::LEGACY_BLS_VERSION : CProUpRegTx::BASIC_BLS_VERSION; <<<<---- THERE IS UB It can be easy tested by adding debug logs to log string, for example rpc_full_name at the moment of call of executor has been during run: 2024-12-26T16:10:15Z rpc full name: 'r,ߧzu\x00\x00����m���istrar_legacy' This PR fixes multiple unexplainable random failures which had happen only for `tsan` build or for only `ubsan` build during debuggin dashpay#6508 and depends only on code revision.
- Loading branch information