mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-02 09:46:52 -05:00
fuzz: Check for addrv1 compatibility before using addrv1 serializer/deserializer on CSubNet
This commit is contained in:
parent
7e373294a5
commit
0e3a78a8ab
1 changed files with 21 additions and 10 deletions
|
@ -15,6 +15,7 @@
|
|||
#include <net.h>
|
||||
#include <netbase.h>
|
||||
#include <node/utxo_snapshot.h>
|
||||
#include <optional.h>
|
||||
#include <primitives/block.h>
|
||||
#include <protocol.h>
|
||||
#include <psbt.h>
|
||||
|
@ -61,9 +62,12 @@ T Deserialize(CDataStream ds)
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
void DeserializeFromFuzzingInput(const std::vector<uint8_t>& buffer, T& obj)
|
||||
void DeserializeFromFuzzingInput(const std::vector<uint8_t>& buffer, T& obj, const Optional<int> protocol_version = nullopt)
|
||||
{
|
||||
CDataStream ds(buffer, SER_NETWORK, INIT_PROTO_VERSION);
|
||||
if (protocol_version) {
|
||||
ds.SetVersion(*protocol_version);
|
||||
} else {
|
||||
try {
|
||||
int version;
|
||||
ds >> version;
|
||||
|
@ -71,6 +75,7 @@ void DeserializeFromFuzzingInput(const std::vector<uint8_t>& buffer, T& obj)
|
|||
} catch (const std::ios_base::failure&) {
|
||||
throw invalid_fuzzing_input_exception();
|
||||
}
|
||||
}
|
||||
try {
|
||||
ds >> obj;
|
||||
} catch (const std::ios_base::failure&) {
|
||||
|
@ -125,9 +130,15 @@ void test_one_input(const std::vector<uint8_t>& buffer)
|
|||
CScript script;
|
||||
DeserializeFromFuzzingInput(buffer, script);
|
||||
#elif SUB_NET_DESERIALIZE
|
||||
CSubNet sub_net;
|
||||
DeserializeFromFuzzingInput(buffer, sub_net);
|
||||
AssertEqualAfterSerializeDeserialize(sub_net);
|
||||
CSubNet sub_net_1;
|
||||
DeserializeFromFuzzingInput(buffer, sub_net_1, INIT_PROTO_VERSION);
|
||||
AssertEqualAfterSerializeDeserialize(sub_net_1, INIT_PROTO_VERSION);
|
||||
CSubNet sub_net_2;
|
||||
DeserializeFromFuzzingInput(buffer, sub_net_2, INIT_PROTO_VERSION | ADDRV2_FORMAT);
|
||||
AssertEqualAfterSerializeDeserialize(sub_net_2, INIT_PROTO_VERSION | ADDRV2_FORMAT);
|
||||
CSubNet sub_net_3;
|
||||
DeserializeFromFuzzingInput(buffer, sub_net_3);
|
||||
AssertEqualAfterSerializeDeserialize(sub_net_3, INIT_PROTO_VERSION | ADDRV2_FORMAT);
|
||||
#elif TX_IN_DESERIALIZE
|
||||
CTxIn tx_in;
|
||||
DeserializeFromFuzzingInput(buffer, tx_in);
|
||||
|
|
Loading…
Add table
Reference in a new issue