From 025fda0a76893d09d19ec9a6c0ba86ad11c466f7 Mon Sep 17 00:00:00 2001 From: brunoerg Date: Mon, 19 Jun 2023 16:56:02 -0300 Subject: [PATCH] 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. --- src/test/fuzz/addrman.cpp | 33 +++++++-------------------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/src/test/fuzz/addrman.cpp b/src/test/fuzz/addrman.cpp index 7218bb82d1c..92ce4945f94 100644 --- a/src/test/fuzz/addrman.cpp +++ b/src/test/fuzz/addrman.cpp @@ -263,40 +263,21 @@ FUZZ_TARGET_INIT(addrman, initialize_addrman) [&] { std::vector addresses; LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) { - const std::optional opt_address = ConsumeDeserializable(fuzzed_data_provider); - if (!opt_address) { - break; - } - addresses.push_back(*opt_address); - } - const std::optional opt_net_addr = ConsumeDeserializable(fuzzed_data_provider); - if (opt_net_addr) { - addr_man.Add(addresses, *opt_net_addr, std::chrono::seconds{ConsumeTime(fuzzed_data_provider, 0, 100000000)}); + addresses.push_back(ConsumeAddress(fuzzed_data_provider)); } + addr_man.Add(addresses, ConsumeNetAddr(fuzzed_data_provider), std::chrono::seconds{ConsumeTime(fuzzed_data_provider, 0, 100000000)}); }, [&] { - const std::optional opt_service = ConsumeDeserializable(fuzzed_data_provider); - if (opt_service) { - addr_man.Good(*opt_service, NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}}); - } + addr_man.Good(ConsumeService(fuzzed_data_provider), NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}}); }, [&] { - const std::optional opt_service = ConsumeDeserializable(fuzzed_data_provider); - if (opt_service) { - addr_man.Attempt(*opt_service, fuzzed_data_provider.ConsumeBool(), NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}}); - } + addr_man.Attempt(ConsumeService(fuzzed_data_provider), fuzzed_data_provider.ConsumeBool(), NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}}); }, [&] { - const std::optional opt_service = ConsumeDeserializable(fuzzed_data_provider); - if (opt_service) { - addr_man.Connected(*opt_service, NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}}); - } + addr_man.Connected(ConsumeService(fuzzed_data_provider), NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}}); }, [&] { - const std::optional opt_service = ConsumeDeserializable(fuzzed_data_provider); - if (opt_service) { - addr_man.SetServices(*opt_service, ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS)); - } + addr_man.SetServices(ConsumeService(fuzzed_data_provider), ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS)); }); } const AddrMan& const_addr_man{addr_man}; @@ -326,4 +307,4 @@ FUZZ_TARGET_INIT(addrman_serdeser, initialize_addrman) data_stream << addr_man1; data_stream >> addr_man2; assert(addr_man1 == addr_man2); -} +} \ No newline at end of file