35 struct invalid_fuzzing_input_exception :
public std::exception {
55 void DeserializeFromFuzzingInput(
const std::vector<uint8_t>&
buffer,
T& obj)
61 ds.SetVersion(version);
62 }
catch (
const std::ios_base::failure&) {
63 throw invalid_fuzzing_input_exception();
67 }
catch (
const std::ios_base::failure&) {
68 throw invalid_fuzzing_input_exception();
74 void AssertEqualAfterSerializeDeserialize(
const T& obj)
76 assert(Deserialize<T>(
Serialize(obj)) == obj);
84 #if ADDR_INFO_DESERIALIZE
86 DeserializeFromFuzzingInput(
buffer, addr_info);
87 #elif BLOCK_FILE_INFO_DESERIALIZE
89 DeserializeFromFuzzingInput(
buffer, block_file_info);
90 #elif FEE_RATE_DESERIALIZE
92 DeserializeFromFuzzingInput(
buffer, fee_rate);
93 AssertEqualAfterSerializeDeserialize(fee_rate);
94 #elif MERKLE_BLOCK_DESERIALIZE
96 DeserializeFromFuzzingInput(
buffer, merkle_block);
97 #elif OUT_POINT_DESERIALIZE
99 DeserializeFromFuzzingInput(
buffer, out_point);
100 AssertEqualAfterSerializeDeserialize(out_point);
101 #elif PUB_KEY_DESERIALIZE
103 DeserializeFromFuzzingInput(
buffer, pub_key);
106 #elif SCRIPT_DESERIALIZE
108 DeserializeFromFuzzingInput(
buffer, script);
109 #elif SUB_NET_DESERIALIZE
111 DeserializeFromFuzzingInput(
buffer, sub_net);
112 AssertEqualAfterSerializeDeserialize(sub_net);
113 #elif TX_IN_DESERIALIZE
115 DeserializeFromFuzzingInput(
buffer, tx_in);
116 AssertEqualAfterSerializeDeserialize(tx_in);
117 #elif KEY_ORIGIN_INFO_DESERIALIZE
119 DeserializeFromFuzzingInput(
buffer, key_origin_info);
120 AssertEqualAfterSerializeDeserialize(key_origin_info);
121 #elif BLOCK_DESERIALIZE
123 DeserializeFromFuzzingInput(
buffer, block);
124 #elif BLOCKLOCATOR_DESERIALIZE
126 DeserializeFromFuzzingInput(
buffer, bl);
127 #elif BLOCKMERKLEROOT
129 DeserializeFromFuzzingInput(
buffer, block);
132 #elif ADDRMAN_DESERIALIZE
134 DeserializeFromFuzzingInput(
buffer, am);
135 #elif BLOCKHEADER_DESERIALIZE
137 DeserializeFromFuzzingInput(
buffer, bh);
138 #elif BANENTRY_DESERIALIZE
140 DeserializeFromFuzzingInput(
buffer, be);
141 #elif TXUNDO_DESERIALIZE
143 DeserializeFromFuzzingInput(
buffer, tu);
144 #elif BLOCKUNDO_DESERIALIZE
146 DeserializeFromFuzzingInput(
buffer, bu);
147 #elif COINS_DESERIALIZE
149 DeserializeFromFuzzingInput(
buffer, coin);
150 #elif NETADDR_DESERIALIZE
152 DeserializeFromFuzzingInput(
buffer, na);
153 AssertEqualAfterSerializeDeserialize(na);
154 #elif SERVICE_DESERIALIZE
156 DeserializeFromFuzzingInput(
buffer, s);
157 AssertEqualAfterSerializeDeserialize(s);
158 #elif MESSAGEHEADER_DESERIALIZE
161 DeserializeFromFuzzingInput(
buffer, mh);
162 (void)mh.
IsValid(pchMessageStart);
163 #elif ADDRESS_DESERIALIZE
165 DeserializeFromFuzzingInput(
buffer, a);
166 #elif INV_DESERIALIZE
168 DeserializeFromFuzzingInput(
buffer, i);
169 #elif BLOOMFILTER_DESERIALIZE
171 DeserializeFromFuzzingInput(
buffer, bf);
172 #elif DISKBLOCKINDEX_DESERIALIZE
174 DeserializeFromFuzzingInput(
buffer, dbi);
175 #elif TXOUTCOMPRESSOR_DESERIALIZE
177 auto toc = Using<TxOutCompression>(to);
178 DeserializeFromFuzzingInput(
buffer, toc);
180 #error Need at least one fuzz target to compile
182 }
catch (
const invalid_fuzzing_input_exception&) {
Extended statistics about a CAddress.
Stochastical (IP) address manager.
A CService with information about it as peer.
Undo information for a CBlock.
BloomFilter is a probabilistic filter which SPV clients provide so that we can filter the transaction...
Fee rate in PIV per kilobyte: CAmount / kB.
Used to relay blocks as header + vector<merkle branch> to filtered nodes.
An outpoint - a combination of a transaction hash and an index n into its vout.
An encapsulated public key.
Serialized script, used inside transaction inputs and outputs.
A combination of a network address (CNetAddr) and a (TCP) port.
An input of a transaction.
An output of a transaction.
Undo information for a CTransaction.
void test_one_input(std::vector< uint8_t > buffer)
std::vector< uint8_t > buffer
#define T(expected, seed, data)
uint256 BlockMerkleRoot(const CBlock &block, bool *mutated)
void Serialize(Stream &s, char a)
Describes a place in the block chain to another node such that if the other node doesn't have the sam...