aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>2023-07-21 15:05:44 +0200
committerMarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>2023-07-21 15:05:07 +0200
commitfabef121b0cdfac6ec1985f6c08c5685a886ba5a (patch)
treec0c3f89ed8811d2b1a7b6d152be8b3c4f2c497d8
parentfa1640617e061431059908fbf496dccca6b4e112 (diff)
refactor: Use EnsureAnyNodeContext
node_context is never null, but if it was, it would lead to a nullptr dereference in node_context->scheduler. Just use EnsureAnyNodeContext everywhere for more robust, consistent, and correct code.
-rw-r--r--src/rpc/node.cpp14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/rpc/node.cpp b/src/rpc/node.cpp
index f614253195..dc5ecb9cbc 100644
--- a/src/rpc/node.cpp
+++ b/src/rpc/node.cpp
@@ -57,11 +57,9 @@ static RPCHelpMan setmocktime()
throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Mocktime cannot be negative: %s.", time));
}
SetMockTime(time);
- auto node_context = util::AnyPtr<NodeContext>(request.context);
- if (node_context) {
- for (const auto& chain_client : node_context->chain_clients) {
- chain_client->setMockTime(time);
- }
+ const NodeContext& node_context{EnsureAnyNodeContext(request.context)};
+ for (const auto& chain_client : node_context.chain_clients) {
+ chain_client->setMockTime(time);
}
return UniValue::VNULL;
@@ -89,10 +87,8 @@ static RPCHelpMan mockscheduler()
throw std::runtime_error("delta_time must be between 1 and 3600 seconds (1 hr)");
}
- auto node_context = CHECK_NONFATAL(util::AnyPtr<NodeContext>(request.context));
- // protect against null pointer dereference
- CHECK_NONFATAL(node_context->scheduler);
- node_context->scheduler->MockForward(std::chrono::seconds(delta_seconds));
+ const NodeContext& node_context{EnsureAnyNodeContext(request.context)};
+ CHECK_NONFATAL(node_context.scheduler)->MockForward(std::chrono::seconds{delta_seconds});
SyncWithValidationInterfaceQueue();
return UniValue::VNULL;