diff --git a/src/test/fuzz/connman.cpp b/src/test/fuzz/connman.cpp index 68b3320d08334a..c6bb5bb440358b 100644 --- a/src/test/fuzz/connman.cpp +++ b/src/test/fuzz/connman.cpp @@ -169,6 +169,25 @@ FUZZ_TARGET(connman, .init = initialize_connman) /*permissions=*/ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS), /*addr_bind=*/ConsumeAddress(fuzzed_data_provider), /*addr_peer=*/peer); + }, + [&] { + CConnman::Options options; + + options.vBinds = ConsumeServiceVector(fuzzed_data_provider, 5); + + options.vWhiteBinds = std::vector{ + fuzzed_data_provider.ConsumeIntegralInRange(0, 5)}; + for (auto& wb : options.vWhiteBinds) { + wb.m_flags = ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS); + wb.m_service = ConsumeService(fuzzed_data_provider); + } + + options.onion_binds = ConsumeServiceVector(fuzzed_data_provider, 5); + + options.bind_on_any = options.vBinds.empty() && options.vWhiteBinds.empty() && + options.onion_binds.empty(); + + connman.InitBindsPublic(options); }); } (void)connman.GetAddedNodeInfo(fuzzed_data_provider.ConsumeBool()); diff --git a/src/test/fuzz/util/net.h b/src/test/fuzz/util/net.h index a6c9e23f2e4ac7..96bd6b1c5b920c 100644 --- a/src/test/fuzz/util/net.h +++ b/src/test/fuzz/util/net.h @@ -103,6 +103,18 @@ inline CService ConsumeService(FuzzedDataProvider& fuzzed_data_provider) noexcep return {ConsumeNetAddr(fuzzed_data_provider), fuzzed_data_provider.ConsumeIntegral()}; } +inline std::vector ConsumeServiceVector(FuzzedDataProvider& fuzzed_data_provider, + size_t max_vector_size) noexcept +{ + std::vector ret; + const size_t size = fuzzed_data_provider.ConsumeIntegralInRange(0, max_vector_size); + ret.reserve(size); + for (size_t i = 0; i < size; ++i) { + ret.emplace_back(ConsumeService(fuzzed_data_provider)); + } + return ret; +} + CAddress ConsumeAddress(FuzzedDataProvider& fuzzed_data_provider) noexcept; template diff --git a/src/test/util/net.h b/src/test/util/net.h index 9de75d51c1f1a3..f577e6a4c3487f 100644 --- a/src/test/util/net.h +++ b/src/test/util/net.h @@ -70,6 +70,11 @@ struct ConnmanTestMsg : public CConnman { CreateNodeFromAcceptedSocket(std::move(sock), permissions, addr_bind, addr_peer); } + bool InitBindsPublic(const CConnman::Options& options) + { + return InitBinds(options); + } + void Handshake(CNode& node, bool successfully_connected, ServiceFlags remote_services,