Skip to content

Commit fa463f1

Browse files
author
MarcoFalke
committed
Merge #20247: fuzz: Check for addrv1 compatibility before using addrv1 serializer. Fuzz addrv2 serialization.
903f3d0 fuzz: Check for addrv1 compatibility before using addrv1 serializer (practicalswift) Pull request description: Fuzz addrv2 address serialization. Check for addrv1 compatibility before using addrv1 serializer. Before this ``` $ src/test/fuzz/netaddr_deserialize netaddr_deserialize: test/fuzz/deserialize.cpp:84: void (anonymous namespace)::AssertEqualAfterSerializeDeserialize(const T &) [T = CNetAddr]: Assertion `Deserialize<T>(Serialize(obj)) == obj' failed. ``` After this patch: ``` $ src/test/fuzz/netaddr_deserialize … ``` ACKs for top commit: MarcoFalke: review ACK 903f3d0 Tree-SHA512: a9ddb71cc31c877fa3dd78dbc908d1e30b4790398fefe19e6541f1fca81e8560f7a11fa099ef3943b94401974c472e523484fdf66f1c23ff2e998558ba4b65de
2 parents d67883d + 903f3d0 commit fa463f1

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

src/test/fuzz/deserialize.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <key.h>
1414
#include <merkleblock.h>
1515
#include <net.h>
16+
#include <netbase.h>
1617
#include <node/utxo_snapshot.h>
1718
#include <primitives/block.h>
1819
#include <protocol.h>
@@ -44,9 +45,9 @@ struct invalid_fuzzing_input_exception : public std::exception {
4445
};
4546

4647
template <typename T>
47-
CDataStream Serialize(const T& obj)
48+
CDataStream Serialize(const T& obj, const int version = INIT_PROTO_VERSION)
4849
{
49-
CDataStream ds(SER_NETWORK, INIT_PROTO_VERSION);
50+
CDataStream ds(SER_NETWORK, version);
5051
ds << obj;
5152
return ds;
5253
}
@@ -79,9 +80,9 @@ void DeserializeFromFuzzingInput(const std::vector<uint8_t>& buffer, T& obj)
7980
}
8081

8182
template <typename T>
82-
void AssertEqualAfterSerializeDeserialize(const T& obj)
83+
void AssertEqualAfterSerializeDeserialize(const T& obj, const int version = INIT_PROTO_VERSION)
8384
{
84-
assert(Deserialize<T>(Serialize(obj)) == obj);
85+
assert(Deserialize<T>(Serialize(obj, version)) == obj);
8586
}
8687

8788
} // namespace
@@ -183,7 +184,10 @@ void test_one_input(const std::vector<uint8_t>& buffer)
183184
#elif NETADDR_DESERIALIZE
184185
CNetAddr na;
185186
DeserializeFromFuzzingInput(buffer, na);
186-
AssertEqualAfterSerializeDeserialize(na);
187+
if (na.IsAddrV1Compatible()) {
188+
AssertEqualAfterSerializeDeserialize(na);
189+
}
190+
AssertEqualAfterSerializeDeserialize(na, INIT_PROTO_VERSION | ADDRV2_FORMAT);
187191
#elif SERVICE_DESERIALIZE
188192
CService s;
189193
DeserializeFromFuzzingInput(buffer, s);

0 commit comments

Comments
 (0)