Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
251FUZZ_TARGET_DESERIALIZE(messageheader_deserialize, {252CMessageHeader mh;253DeserializeFromFuzzingInput(buffer, mh);254(void)mh.IsMessageTypeValid();255})256FUZZ_TARGET(address_deserialize, .init = initialize_deserialize)257{258FuzzedDataProvider fdp{buffer.data(), buffer.size()};259const auto ser_enc{ConsumeDeserializationParams<CAddress::SerParams>(fdp)};260const auto maybe_a{ConsumeDeserializable<CAddress>(fdp, ser_enc)};261if (!maybe_a) return;262const CAddress& a{*maybe_a};263// A CAddress in V1 mode will roundtrip264// in all 4 formats (v1/v2, network/disk)265if (ser_enc.enc == CNetAddr::Encoding::V1) {266AssertEqualAfterSerializeDeserialize(a, CAddress::V1_NETWORK);267AssertEqualAfterSerializeDeserialize(a, CAddress::V1_DISK);268AssertEqualAfterSerializeDeserialize(a, CAddress::V2_NETWORK);269AssertEqualAfterSerializeDeserialize(a, CAddress::V2_DISK);270} else {271// A CAddress in V2 mode will roundtrip in both V2 formats, and also in the V1 formats272// if it's V1 compatible.273if (a.IsAddrV1Compatible()) {274AssertEqualAfterSerializeDeserialize(a, CAddress::V1_DISK);275AssertEqualAfterSerializeDeserialize(a, CAddress::V1_NETWORK);276}277AssertEqualAfterSerializeDeserialize(a, CAddress::V2_NETWORK);278AssertEqualAfterSerializeDeserialize(a, CAddress::V2_DISK);279}280}281FUZZ_TARGET_DESERIALIZE(inv_deserialize, {282CInv i;283DeserializeFromFuzzingInput(buffer, i);284})285FUZZ_TARGET_DESERIALIZE(bloomfilter_deserialize, {286CBloomFilter bf;287DeserializeFromFuzzingInput(buffer, bf);288})289FUZZ_TARGET_DESERIALIZE(diskblockindex_deserialize, {290CDiskBlockIndex dbi;291DeserializeFromFuzzingInput(buffer, dbi);292})293FUZZ_TARGET_DESERIALIZE(txoutcompressor_deserialize, {294CTxOut to;295auto toc = Using<TxOutCompression>(to);296DeserializeFromFuzzingInput(buffer, toc);297})298FUZZ_TARGET_DESERIALIZE(blocktransactions_deserialize, {299BlockTransactions bt;300DeserializeFromFuzzingInput(buffer, bt);301})302FUZZ_TARGET_DESERIALIZE(blocktransactionsrequest_deserialize, {303BlockTransactionsRequest btr;304DeserializeFromFuzzingInput(buffer, btr);305})306FUZZ_TARGET_DESERIALIZE(snapshotmetadata_deserialize, {307auto msg_start = Params().MessageStart();308SnapshotMetadata snapshot_metadata{msg_start};309DeserializeFromFuzzingInput(buffer, snapshot_metadata);310})311FUZZ_TARGET_DESERIALIZE(uint160_deserialize, {312uint160 u160;313DeserializeFromFuzzingInput(buffer, u160);314AssertEqualAfterSerializeDeserialize(u160);315})316FUZZ_TARGET_DESERIALIZE(uint256_deserialize, {317uint256 u256;318DeserializeFromFuzzingInput(buffer, u256);319AssertEqualAfterSerializeDeserialize(u256);320})321// Classes intentionally not covered in this file since their deserialization code is322// fuzzed elsewhere:323// * Deserialization of CTxOut is fuzzed in test/fuzz/tx_out.cpp324// * Deserialization of CMutableTransaction is fuzzed in src/test/fuzz/transaction.cpp
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.