Skip to content

Commit 025fda0

Browse files
committed
fuzz: addrman, avoid ConsumeDeserializable when possible
`ConsumeDeserializable` may return `std::nullopt`, prefer to call specific functions such as `ConsumeService`and `ConsumeNetAddr` which always return a value.
1 parent 7f0b79e commit 025fda0

File tree

1 file changed

+7
-26
lines changed

1 file changed

+7
-26
lines changed

src/test/fuzz/addrman.cpp

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -263,40 +263,21 @@ FUZZ_TARGET_INIT(addrman, initialize_addrman)
263263
[&] {
264264
std::vector<CAddress> addresses;
265265
LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) {
266-
const std::optional<CAddress> opt_address = ConsumeDeserializable<CAddress>(fuzzed_data_provider);
267-
if (!opt_address) {
268-
break;
269-
}
270-
addresses.push_back(*opt_address);
271-
}
272-
const std::optional<CNetAddr> opt_net_addr = ConsumeDeserializable<CNetAddr>(fuzzed_data_provider);
273-
if (opt_net_addr) {
274-
addr_man.Add(addresses, *opt_net_addr, std::chrono::seconds{ConsumeTime(fuzzed_data_provider, 0, 100000000)});
266+
addresses.push_back(ConsumeAddress(fuzzed_data_provider));
275267
}
268+
addr_man.Add(addresses, ConsumeNetAddr(fuzzed_data_provider), std::chrono::seconds{ConsumeTime(fuzzed_data_provider, 0, 100000000)});
276269
},
277270
[&] {
278-
const std::optional<CService> opt_service = ConsumeDeserializable<CService>(fuzzed_data_provider);
279-
if (opt_service) {
280-
addr_man.Good(*opt_service, NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}});
281-
}
271+
addr_man.Good(ConsumeService(fuzzed_data_provider), NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}});
282272
},
283273
[&] {
284-
const std::optional<CService> opt_service = ConsumeDeserializable<CService>(fuzzed_data_provider);
285-
if (opt_service) {
286-
addr_man.Attempt(*opt_service, fuzzed_data_provider.ConsumeBool(), NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}});
287-
}
274+
addr_man.Attempt(ConsumeService(fuzzed_data_provider), fuzzed_data_provider.ConsumeBool(), NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}});
288275
},
289276
[&] {
290-
const std::optional<CService> opt_service = ConsumeDeserializable<CService>(fuzzed_data_provider);
291-
if (opt_service) {
292-
addr_man.Connected(*opt_service, NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}});
293-
}
277+
addr_man.Connected(ConsumeService(fuzzed_data_provider), NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}});
294278
},
295279
[&] {
296-
const std::optional<CService> opt_service = ConsumeDeserializable<CService>(fuzzed_data_provider);
297-
if (opt_service) {
298-
addr_man.SetServices(*opt_service, ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS));
299-
}
280+
addr_man.SetServices(ConsumeService(fuzzed_data_provider), ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS));
300281
});
301282
}
302283
const AddrMan& const_addr_man{addr_man};
@@ -326,4 +307,4 @@ FUZZ_TARGET_INIT(addrman_serdeser, initialize_addrman)
326307
data_stream << addr_man1;
327308
data_stream >> addr_man2;
328309
assert(addr_man1 == addr_man2);
329-
}
310+
}

0 commit comments

Comments
 (0)