From a44a6a15f94a6223a71790c5a65eb2b8a5b35dd2 Mon Sep 17 00:00:00 2001 From: Gregory Maxwell Date: Sun, 2 Apr 2017 21:39:32 +0000 Subject: [PATCH] Check transaction count early in submitblock. There is no point in even hashing a submitted block which doesn't have a coinbase transaction. This also results in more useful error reporting on corrupted input. Thanks to rawodb for the bug report. Github-Pull: #10146 Rebased-From: 4f15ea102d15eb237b63464725508dc509e98819 --- src/rpc/mining.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 38d7b1eb1e2..33e234a95ef 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -748,6 +748,10 @@ UniValue submitblock(const JSONRPCRequest& request) if (!DecodeHexBlk(block, request.params[0].get_str())) throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Block decode failed"); + if (block.vtx.empty() || !block.vtx[0]->IsCoinBase()) { + throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Block does not start with a coinbase"); + } + uint256 hash = block.GetHash(); bool fBlockPresent = false; {