9 #include <blockfilter.h> 47 static const auto testing_setup = MakeNoLogFileContext<>();
48 g_setup = testing_setup.get();
51 #define FUZZ_TARGET_DESERIALIZE(name, code) \ 52 FUZZ_TARGET(name, .init = initialize_deserialize) \ 56 } catch (const invalid_fuzzing_input_exception&) { \ 62 struct invalid_fuzzing_input_exception :
public std::exception {
65 template <
typename T,
typename P>
73 template <
typename T,
typename P>
81 template <
typename T,
typename P>
82 void DeserializeFromFuzzingInput(
FuzzBufferType buffer,
T&& obj,
const P& params)
87 }
catch (
const std::ios_base::failure&) {
88 throw invalid_fuzzing_input_exception();
101 template <
typename T>
109 template <
typename T>
118 }
catch (
const std::ios_base::failure&) {
119 throw invalid_fuzzing_input_exception();
124 }
catch (
const std::ios_base::failure&) {
125 throw invalid_fuzzing_input_exception();
130 template <
typename T,
typename P>
131 void AssertEqualAfterSerializeDeserialize(
const T& obj,
const P& params)
135 template <
typename T>
136 void AssertEqualAfterSerializeDeserialize(
const T& obj)
145 DeserializeFromFuzzingInput(buffer, block_filter);
150 (void)ConsumeDeserializable<AddrInfo>(fdp, ConsumeDeserializationParams<CAddress::SerParams>(fdp));
154 DeserializeFromFuzzingInput(buffer, block_file_info);
158 DeserializeFromFuzzingInput(buffer, block_header_and_short_txids);
162 DeserializeFromFuzzingInput(buffer, fee_rate);
163 AssertEqualAfterSerializeDeserialize(fee_rate);
167 DeserializeFromFuzzingInput(buffer, merkle_block);
171 DeserializeFromFuzzingInput(buffer, out_point);
172 AssertEqualAfterSerializeDeserialize(out_point);
176 DeserializeFromFuzzingInput(buffer, partial_merkle_tree);
180 DeserializeFromFuzzingInput(buffer, pub_key);
181 AssertEqualAfterSerializeDeserialize(pub_key);
185 DeserializeFromFuzzingInput(buffer, script);
189 DeserializeFromFuzzingInput(buffer, tx_in);
190 AssertEqualAfterSerializeDeserialize(tx_in);
194 DeserializeFromFuzzingInput(buffer, flat_file_pos);
195 AssertEqualAfterSerializeDeserialize(flat_file_pos);
199 DeserializeFromFuzzingInput(buffer, key_origin_info);
200 AssertEqualAfterSerializeDeserialize(key_origin_info);
204 DeserializeFromFuzzingInput(buffer, partially_signed_transaction);
208 DeserializeFromFuzzingInput(buffer, prefilled_transaction);
212 DeserializeFromFuzzingInput(buffer, psbt_input);
216 DeserializeFromFuzzingInput(buffer, psbt_output);
220 DeserializeFromFuzzingInput(buffer, block);
224 DeserializeFromFuzzingInput(buffer, bl);
228 DeserializeFromFuzzingInput(buffer, block);
234 DeserializeFromFuzzingInput(buffer, bh);
238 DeserializeFromFuzzingInput(buffer, tu);
242 DeserializeFromFuzzingInput(buffer, bu);
246 DeserializeFromFuzzingInput(buffer, coin);
251 const auto maybe_na{ConsumeDeserializable<CNetAddr>(fdp, ConsumeDeserializationParams<CNetAddr::SerParams>(fdp))};
252 if (!maybe_na)
return;
254 if (na.IsAddrV1Compatible()) {
262 const auto ser_params{ConsumeDeserializationParams<CNetAddr::SerParams>(fdp)};
263 const auto maybe_s{ConsumeDeserializable<CService>(fdp, ser_params)};
264 if (!maybe_s)
return;
266 if (s.IsAddrV1Compatible()) {
271 assert(s.IsAddrV1Compatible());
276 DeserializeFromFuzzingInput(buffer, mh);
282 const auto ser_enc{ConsumeDeserializationParams<CAddress::SerParams>(fdp)};
283 const auto maybe_a{ConsumeDeserializable<CAddress>(fdp, ser_enc)};
284 if (!maybe_a)
return;
296 if (a.IsAddrV1Compatible()) {
306 DeserializeFromFuzzingInput(buffer, i);
310 DeserializeFromFuzzingInput(buffer, bf);
314 DeserializeFromFuzzingInput(buffer, dbi);
318 auto toc = Using<TxOutCompression>(to);
319 DeserializeFromFuzzingInput(buffer, toc);
323 DeserializeFromFuzzingInput(buffer, bt);
327 DeserializeFromFuzzingInput(buffer, btr);
331 DeserializeFromFuzzingInput(buffer, snapshot_metadata);
335 DeserializeFromFuzzingInput(buffer, u160);
336 AssertEqualAfterSerializeDeserialize(u160);
340 DeserializeFromFuzzingInput(buffer, u256);
341 AssertEqualAfterSerializeDeserialize(u256);
Describes a place in the block chain to another node such that if the other node doesn't have the sam...
BloomFilter is a probabilistic filter which SPV clients provide so that we can filter the transaction...
static constexpr SerParams V2_NETWORK
static constexpr SerParams V1_DISK
A version of CTransaction with the PSBT format.
Data structure that represents a partial merkle tree.
A structure for PSBTs which contains per output information.
static constexpr SerParams V2_DISK
Used to relay blocks as header + vector<merkle branch> to filtered nodes.
An input of a transaction.
Double ended buffer combining vector and stream-like interfaces.
static const int INIT_PROTO_VERSION
initial proto version, to be increased after version/verack negotiation
Complete block filter struct as defined in BIP 157.
A combination of a network address (CNetAddr) and a (TCP) port.
An encapsulated public key.
static constexpr SerParams V1
void Serialize(Stream &, char)=delete
A CService with information about it as peer.
uint256 BlockMerkleRoot(const CBlock &block, bool *mutated)
static auto WithParams(const Params ¶ms, T &&t)
Return a wrapper around t that (de)serializes it with specified parameter params. ...
An output of a transaction.
Used to marshal pointers into hashes for db storage.
An outpoint - a combination of a transaction hash and an index n into its vout.
Undo information for a CBlock.
Serialized script, used inside transaction inputs and outputs.
Undo information for a CTransaction.
#define FUZZ_TARGET_DESERIALIZE(name, code)
constexpr bool empty() const noexcept
Fee rate in satoshis per kilovirtualbyte: CAmount / kvB.
static constexpr SerParams V2
void initialize_deserialize()
A Span is an object that can refer to a contiguous sequence of objects.
static constexpr SerParams V1_NETWORK
#define T(expected, seed, data)