mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 22:50:59 +01:00
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.
This commit is contained in:
@@ -263,40 +263,21 @@ FUZZ_TARGET_INIT(addrman, initialize_addrman)
|
|||||||
[&] {
|
[&] {
|
||||||
std::vector<CAddress> addresses;
|
std::vector<CAddress> addresses;
|
||||||
LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) {
|
LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) {
|
||||||
const std::optional<CAddress> opt_address = ConsumeDeserializable<CAddress>(fuzzed_data_provider);
|
addresses.push_back(ConsumeAddress(fuzzed_data_provider));
|
||||||
if (!opt_address) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
addresses.push_back(*opt_address);
|
|
||||||
}
|
|
||||||
const std::optional<CNetAddr> opt_net_addr = ConsumeDeserializable<CNetAddr>(fuzzed_data_provider);
|
|
||||||
if (opt_net_addr) {
|
|
||||||
addr_man.Add(addresses, *opt_net_addr, std::chrono::seconds{ConsumeTime(fuzzed_data_provider, 0, 100000000)});
|
|
||||||
}
|
}
|
||||||
|
addr_man.Add(addresses, ConsumeNetAddr(fuzzed_data_provider), std::chrono::seconds{ConsumeTime(fuzzed_data_provider, 0, 100000000)});
|
||||||
},
|
},
|
||||||
[&] {
|
[&] {
|
||||||
const std::optional<CService> opt_service = ConsumeDeserializable<CService>(fuzzed_data_provider);
|
addr_man.Good(ConsumeService(fuzzed_data_provider), NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}});
|
||||||
if (opt_service) {
|
|
||||||
addr_man.Good(*opt_service, NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
[&] {
|
[&] {
|
||||||
const std::optional<CService> opt_service = ConsumeDeserializable<CService>(fuzzed_data_provider);
|
addr_man.Attempt(ConsumeService(fuzzed_data_provider), fuzzed_data_provider.ConsumeBool(), NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}});
|
||||||
if (opt_service) {
|
|
||||||
addr_man.Attempt(*opt_service, fuzzed_data_provider.ConsumeBool(), NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
[&] {
|
[&] {
|
||||||
const std::optional<CService> opt_service = ConsumeDeserializable<CService>(fuzzed_data_provider);
|
addr_man.Connected(ConsumeService(fuzzed_data_provider), NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}});
|
||||||
if (opt_service) {
|
|
||||||
addr_man.Connected(*opt_service, NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
[&] {
|
[&] {
|
||||||
const std::optional<CService> opt_service = ConsumeDeserializable<CService>(fuzzed_data_provider);
|
addr_man.SetServices(ConsumeService(fuzzed_data_provider), ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS));
|
||||||
if (opt_service) {
|
|
||||||
addr_man.SetServices(*opt_service, ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const AddrMan& const_addr_man{addr_man};
|
const AddrMan& const_addr_man{addr_man};
|
||||||
|
|||||||
Reference in New Issue
Block a user