xref: /aosp_15_r20/external/cronet/net/base/parse_url_hostname_to_address_fuzzer.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2016 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <stddef.h>
6 #include <stdint.h>
7 
8 #include <functional>
9 #include <string_view>
10 
11 #include "net/base/address_list.h"
12 #include "net/base/ip_address.h"
13 
14 // Entry point for LibFuzzer.
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)15 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
16   const std::string_view hostname(reinterpret_cast<const char*>(data), size);
17   net::IPAddress address;
18 
19   if (net::ParseURLHostnameToAddress(hostname, &address)) {
20     // To fuzz port number without spending raw bytes of data, use hash(data).
21     std::size_t data_hash = std::hash<std::string>()(std::string(hostname));
22     uint16_t port = static_cast<uint16_t>(data_hash & 0xFFFF);
23     net::AddressList addresses =
24         net::AddressList::CreateFromIPAddress(address, port);
25 
26     for (const auto& endpoint : addresses) {
27       endpoint.ToString();
28     }
29   }
30 
31   return 0;
32 }
33