/root/bitcoin/src/test/fuzz/netbase_dns_lookup.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2021-2022 The Bitcoin Core developers |
2 | | // Distributed under the MIT software license, see the accompanying |
3 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
4 | | |
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> |
10 | | |
11 | | #include <cstdint> |
12 | | #include <string> |
13 | | #include <vector> |
14 | | |
15 | | FUZZ_TARGET(netbase_dns_lookup) |
16 | 0 | { |
17 | 0 | FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()}; |
18 | 0 | const std::string name = fuzzed_data_provider.ConsumeRandomLengthString(512); |
19 | 0 | const unsigned int max_results = fuzzed_data_provider.ConsumeIntegral<unsigned int>(); |
20 | 0 | const bool allow_lookup = fuzzed_data_provider.ConsumeBool(); |
21 | 0 | const uint16_t default_port = fuzzed_data_provider.ConsumeIntegral<uint16_t>(); |
22 | |
|
23 | 0 | auto fuzzed_dns_lookup_function = [&](const std::string&, bool) { |
24 | 0 | std::vector<CNetAddr> resolved_addresses; |
25 | 0 | LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) { |
26 | 0 | resolved_addresses.push_back(ConsumeNetAddr(fuzzed_data_provider)); |
27 | 0 | } |
28 | 0 | return resolved_addresses; |
29 | 0 | }; |
30 | |
|
31 | 0 | { |
32 | 0 | const std::vector<CNetAddr> resolved_addresses{LookupHost(name, max_results, allow_lookup, fuzzed_dns_lookup_function)}; |
33 | 0 | for (const CNetAddr& resolved_address : resolved_addresses) { |
34 | 0 | assert(!resolved_address.IsInternal()); |
35 | 0 | } |
36 | 0 | assert(resolved_addresses.size() <= max_results || max_results == 0); |
37 | 0 | } |
38 | 0 | { |
39 | 0 | const std::optional<CNetAddr> resolved_address{LookupHost(name, allow_lookup, fuzzed_dns_lookup_function)}; |
40 | 0 | if (resolved_address.has_value()) { |
41 | 0 | assert(!resolved_address.value().IsInternal()); |
42 | 0 | } |
43 | 0 | } |
44 | 0 | { |
45 | 0 | const std::vector<CService> resolved_services{Lookup(name, default_port, allow_lookup, max_results, fuzzed_dns_lookup_function)}; |
46 | 0 | for (const CNetAddr& resolved_service : resolved_services) { |
47 | 0 | assert(!resolved_service.IsInternal()); |
48 | 0 | } |
49 | 0 | assert(resolved_services.size() <= max_results || max_results == 0); |
50 | 0 | } |
51 | 0 | { |
52 | 0 | const std::optional<CService> resolved_service{Lookup(name, default_port, allow_lookup, fuzzed_dns_lookup_function)}; |
53 | 0 | if (resolved_service.has_value()) { |
54 | 0 | assert(!resolved_service.value().IsInternal()); |
55 | 0 | } |
56 | 0 | } |
57 | 0 | { |
58 | 0 | CService resolved_service = LookupNumeric(name, default_port, fuzzed_dns_lookup_function); |
59 | 0 | assert(!resolved_service.IsInternal()); |
60 | 0 | } |
61 | 0 | { |
62 | 0 | (void)LookupSubNet(name); |
63 | 0 | } |
64 | 0 | } |