|
15 | 15 | #include <net.h> |
16 | 16 | #include <netbase.h> |
17 | 17 | #include <node/utxo_snapshot.h> |
| 18 | +#include <optional.h> |
18 | 19 | #include <primitives/block.h> |
19 | 20 | #include <protocol.h> |
20 | 21 | #include <psbt.h> |
@@ -61,15 +62,19 @@ T Deserialize(CDataStream ds) |
61 | 62 | } |
62 | 63 |
|
63 | 64 | template <typename T> |
64 | | -void DeserializeFromFuzzingInput(const std::vector<uint8_t>& buffer, T& obj) |
| 65 | +void DeserializeFromFuzzingInput(const std::vector<uint8_t>& buffer, T& obj, const Optional<int> protocol_version = nullopt) |
65 | 66 | { |
66 | 67 | CDataStream ds(buffer, SER_NETWORK, INIT_PROTO_VERSION); |
67 | | - try { |
68 | | - int version; |
69 | | - ds >> version; |
70 | | - ds.SetVersion(version); |
71 | | - } catch (const std::ios_base::failure&) { |
72 | | - throw invalid_fuzzing_input_exception(); |
| 68 | + if (protocol_version) { |
| 69 | + ds.SetVersion(*protocol_version); |
| 70 | + } else { |
| 71 | + try { |
| 72 | + int version; |
| 73 | + ds >> version; |
| 74 | + ds.SetVersion(version); |
| 75 | + } catch (const std::ios_base::failure&) { |
| 76 | + throw invalid_fuzzing_input_exception(); |
| 77 | + } |
73 | 78 | } |
74 | 79 | try { |
75 | 80 | ds >> obj; |
@@ -125,9 +130,15 @@ void test_one_input(const std::vector<uint8_t>& buffer) |
125 | 130 | CScript script; |
126 | 131 | DeserializeFromFuzzingInput(buffer, script); |
127 | 132 | #elif SUB_NET_DESERIALIZE |
128 | | - CSubNet sub_net; |
129 | | - DeserializeFromFuzzingInput(buffer, sub_net); |
130 | | - AssertEqualAfterSerializeDeserialize(sub_net); |
| 133 | + CSubNet sub_net_1; |
| 134 | + DeserializeFromFuzzingInput(buffer, sub_net_1, INIT_PROTO_VERSION); |
| 135 | + AssertEqualAfterSerializeDeserialize(sub_net_1, INIT_PROTO_VERSION); |
| 136 | + CSubNet sub_net_2; |
| 137 | + DeserializeFromFuzzingInput(buffer, sub_net_2, INIT_PROTO_VERSION | ADDRV2_FORMAT); |
| 138 | + AssertEqualAfterSerializeDeserialize(sub_net_2, INIT_PROTO_VERSION | ADDRV2_FORMAT); |
| 139 | + CSubNet sub_net_3; |
| 140 | + DeserializeFromFuzzingInput(buffer, sub_net_3); |
| 141 | + AssertEqualAfterSerializeDeserialize(sub_net_3, INIT_PROTO_VERSION | ADDRV2_FORMAT); |
131 | 142 | #elif TX_IN_DESERIALIZE |
132 | 143 | CTxIn tx_in; |
133 | 144 | DeserializeFromFuzzingInput(buffer, tx_in); |
|
0 commit comments