Skip to content

Commit c982fc5

Browse files
committed
merge bitcoin#20247: Check for addrv1 compatibility before using addrv1 serializer. Fuzz addrv2 serialization.
1 parent 5d025c8 commit c982fc5

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 <primitives/block.h>
1718
#include <protocol.h>
1819
#include <psbt.h>
@@ -42,9 +43,9 @@ struct invalid_fuzzing_input_exception : public std::exception {
4243
};
4344

4445
template <typename T>
45-
CDataStream Serialize(const T& obj)
46+
CDataStream Serialize(const T& obj, const int version = INIT_PROTO_VERSION)
4647
{
47-
CDataStream ds(SER_NETWORK, INIT_PROTO_VERSION);
48+
CDataStream ds(SER_NETWORK, version);
4849
ds << obj;
4950
return ds;
5051
}
@@ -77,9 +78,9 @@ void DeserializeFromFuzzingInput(const std::vector<uint8_t>& buffer, T& obj)
7778
}
7879

7980
template <typename T>
80-
void AssertEqualAfterSerializeDeserialize(const T& obj)
81+
void AssertEqualAfterSerializeDeserialize(const T& obj, const int version = INIT_PROTO_VERSION)
8182
{
82-
assert(Deserialize<T>(Serialize(obj)) == obj);
83+
assert(Deserialize<T>(Serialize(obj, version)) == obj);
8384
}
8485

8586
} // namespace
@@ -181,7 +182,10 @@ void test_one_input(const std::vector<uint8_t>& buffer)
181182
#elif NETADDR_DESERIALIZE
182183
CNetAddr na;
183184
DeserializeFromFuzzingInput(buffer, na);
184-
AssertEqualAfterSerializeDeserialize(na);
185+
if (na.IsAddrV1Compatible()) {
186+
AssertEqualAfterSerializeDeserialize(na);
187+
}
188+
AssertEqualAfterSerializeDeserialize(na, INIT_PROTO_VERSION | ADDRV2_FORMAT);
185189
#elif SERVICE_DESERIALIZE
186190
CService s;
187191
DeserializeFromFuzzingInput(buffer, s);

0 commit comments

Comments
 (0)