Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
1// Copyright (c) 2021-present The Bitcoin Core developers2// Distributed under the MIT software license, see the accompanying3// file COPYING or http://www.opensource.org/licenses/mit-license.php.5#include <netaddress.h>6#include <netbase.h>7#include <test/fuzz/FuzzedDataProvider.h>8#include <test/fuzz/fuzz.h>9#include <test/fuzz/util/net.h>11#include <cstdint>12#include <string>13#include <vector>15FUZZ_TARGET(netbase_dns_lookup)16{17FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};18const std::string name = fuzzed_data_provider.ConsumeRandomLengthString(512);19const unsigned int max_results = fuzzed_data_provider.ConsumeIntegral<unsigned int>();20const bool allow_lookup = fuzzed_data_provider.ConsumeBool();21const uint16_t default_port = fuzzed_data_provider.ConsumeIntegral<uint16_t>();23auto fuzzed_dns_lookup_function = [&](const std::string&, bool) {24std::vector<CNetAddr> resolved_addresses;25LIMITED_WHILE (fuzzed_data_provider.ConsumeBool(), 10000) {26resolved_addresses.push_back(ConsumeNetAddr(fuzzed_data_provider));27}28return resolved_addresses;29};31{32const std::vector<CNetAddr> resolved_addresses{LookupHost(name, max_results, allow_lookup, fuzzed_dns_lookup_function)};33for (const CNetAddr& resolved_address : resolved_addresses) {34assert(!resolved_address.IsInternal());35}36assert(resolved_addresses.size() <= max_results || max_results == 0);37}38{39const std::optional<CNetAddr> resolved_address{LookupHost(name, allow_lookup, fuzzed_dns_lookup_function)};40if (resolved_address.has_value()) {41assert(!resolved_address.value().IsInternal());42}43}44{45const std::vector<CService> resolved_services{Lookup(name, default_port, allow_lookup, max_results, fuzzed_dns_lookup_function)};46for (const CNetAddr& resolved_service : resolved_services) {47assert(!resolved_service.IsInternal());48}49assert(resolved_services.size() <= max_results || max_results == 0);50}51{52const std::optional<CService> resolved_service{Lookup(name, default_port, allow_lookup, fuzzed_dns_lookup_function)};53if (resolved_service.has_value()) {54assert(!resolved_service.value().IsInternal());55}56}57{58CService resolved_service = LookupNumeric(name, default_port, fuzzed_dns_lookup_function);59assert(!resolved_service.IsInternal());60}61{62(void)LookupSubNet(name);63}64}
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.