Changeset View
Changeset View
Standalone View
Standalone View
src/test/fuzz/p2p_transport_deserializer.cpp
Show All 14 Lines | |||||
#include <vector> | #include <vector> | ||||
void initialize() { | void initialize() { | ||||
SelectParams(CBaseChainParams::REGTEST); | SelectParams(CBaseChainParams::REGTEST); | ||||
} | } | ||||
void test_one_input(const std::vector<uint8_t> &buffer) { | void test_one_input(const std::vector<uint8_t> &buffer) { | ||||
const Config &config = GetConfig(); | const Config &config = GetConfig(); | ||||
V1TransportDeserializer deserializer{config.GetChainParams().NetMagic(), | // Construct deserializer, with a dummy NodeId | ||||
V1TransportDeserializer deserializer{Params(), static_cast<NodeId>(0), | |||||
SER_NETWORK, INIT_PROTO_VERSION}; | SER_NETWORK, INIT_PROTO_VERSION}; | ||||
Span<const uint8_t> msg_bytes{buffer}; | Span<const uint8_t> msg_bytes{buffer}; | ||||
while (msg_bytes.size() > 0) { | while (msg_bytes.size() > 0) { | ||||
const int handled = deserializer.Read(config, msg_bytes); | const int handled = deserializer.Read(config, msg_bytes); | ||||
if (handled < 0) { | if (handled < 0) { | ||||
break; | break; | ||||
} | } | ||||
if (deserializer.Complete()) { | if (deserializer.Complete()) { | ||||
const std::chrono::microseconds m_time{ | const std::chrono::microseconds m_time{ | ||||
std::numeric_limits<int64_t>::max()}; | std::numeric_limits<int64_t>::max()}; | ||||
const CNetMessage msg = deserializer.GetMessage(config, m_time); | uint32_t out_err_raw_size{0}; | ||||
assert(msg.m_command.size() <= CMessageHeader::COMMAND_SIZE); | std::optional<CNetMessage> result{ | ||||
assert(msg.m_raw_message_size <= buffer.size()); | deserializer.GetMessage(m_time, out_err_raw_size)}; | ||||
assert(msg.m_raw_message_size == | if (result) { | ||||
CMessageHeader::HEADER_SIZE + msg.m_message_size); | assert(result->m_command.size() <= | ||||
assert(msg.m_time == m_time); | CMessageHeader::COMMAND_SIZE); | ||||
if (msg.m_valid_header) { | assert(result->m_raw_message_size <= buffer.size()); | ||||
assert(msg.m_valid_netmagic); | assert(result->m_raw_message_size == | ||||
} | CMessageHeader::HEADER_SIZE + result->m_message_size); | ||||
if (!msg.m_valid_netmagic) { | assert(result->m_time == m_time); | ||||
assert(!msg.m_valid_header); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } |