From c42ded3d9bda8b273780a4a81490bbf1b9e9c261 Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Thu, 9 Feb 2023 14:03:41 +0100 Subject: [PATCH] fuzz: ConsumeNetAddr(): avoid IPv6 addresses that look like CJDNS The fuzz testing framework runs as if `-cjdnsreachable` is set and in this case addresses like `{net=IPv6, addr=fc...}` are not possible. --- src/test/fuzz/util/net.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/test/fuzz/util/net.cpp b/src/test/fuzz/util/net.cpp index d23e9977193..5a286c05d25 100644 --- a/src/test/fuzz/util/net.cpp +++ b/src/test/fuzz/util/net.cpp @@ -36,7 +36,11 @@ CNetAddr ConsumeNetAddr(FuzzedDataProvider& fuzzed_data_provider) noexcept } else if (network == Network::NET_IPV6) { if (fuzzed_data_provider.remaining_bytes() >= 16) { in6_addr v6_addr = {}; - memcpy(v6_addr.s6_addr, fuzzed_data_provider.ConsumeBytes(16).data(), 16); + auto addr_bytes = fuzzed_data_provider.ConsumeBytes(16); + if (addr_bytes[0] == CJDNS_PREFIX) { // Avoid generating IPv6 addresses that look like CJDNS. + addr_bytes[0] = 0x55; // Just an arbitrary number, anything != CJDNS_PREFIX would do. + } + memcpy(v6_addr.s6_addr, addr_bytes.data(), 16); net_addr = CNetAddr{v6_addr, fuzzed_data_provider.ConsumeIntegral()}; } } else if (network == Network::NET_INTERNAL) {