From 149be06daf3e8b1963bb49998a8de4eda702dc48 Mon Sep 17 00:00:00 2001 From: Patrick Lodder Date: Wed, 9 Oct 2024 15:34:16 -0400 Subject: [PATCH] bugfix: change asserts into handled failures for cmpctblk Replaces assert() calls with if() statements returning functional failure that can be handled for situations that can be triggered from outside of compiled code - i.e. peers. Backported from: 42bd4c74 Original Author: dergoegge --- src/blockencodings.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/blockencodings.cpp b/src/blockencodings.cpp index ef27877c6cc..95966ab4f7e 100644 --- a/src/blockencodings.cpp +++ b/src/blockencodings.cpp @@ -53,7 +53,10 @@ ReadStatus PartiallyDownloadedBlock::InitData(const CBlockHeaderAndShortTxIDs& c if (cmpctblock.shorttxids.size() + cmpctblock.prefilledtxn.size() > MAX_BLOCK_BASE_SIZE / MIN_TRANSACTION_BASE_SIZE) return READ_STATUS_INVALID; - assert(header.IsNull() && txn_available.empty()); + if (!header.IsNull() || !txn_available.empty()) { + return READ_STATUS_FAILED; + } + header = cmpctblock.header; txn_available.resize(cmpctblock.BlockTxCount()); @@ -170,13 +173,19 @@ ReadStatus PartiallyDownloadedBlock::InitData(const CBlockHeaderAndShortTxIDs& c } bool PartiallyDownloadedBlock::IsTxAvailable(size_t index) const { - assert(!header.IsNull()); + if (header.IsNull()) { + return false; + } + assert(index < txn_available.size()); return txn_available[index] ? true : false; } ReadStatus PartiallyDownloadedBlock::FillBlock(CBlock& block, const std::vector& vtx_missing) { - assert(!header.IsNull()); + if (header.IsNull()) { + return READ_STATUS_INVALID; + } + uint256 hash = header.GetHash(); block = header; block.vtx.resize(txn_available.size());