1 // Copyright 2020 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 "net/dns/dns_alias_utility.h" 6 7 #include <set> 8 #include <string> 9 10 #include "net/base/url_util.h" 11 #include "net/dns/dns_names_util.h" 12 #include "net/dns/public/dns_protocol.h" 13 #include "url/third_party/mozilla/url_parse.h" 14 #include "url/url_canon.h" 15 #include "url/url_canon_stdstring.h" 16 17 namespace net::dns_alias_utility { 18 FixUpDnsAliases(const std::set<std::string> & aliases)19std::set<std::string> FixUpDnsAliases(const std::set<std::string>& aliases) { 20 std::set<std::string> fixed_aliases; 21 22 for (const std::string& alias : aliases) { 23 if (!dns_names_util::IsValidDnsRecordName(alias)) { 24 continue; 25 } 26 27 std::string canonicalized_alias; 28 url::StdStringCanonOutput output(&canonicalized_alias); 29 url::CanonHostInfo host_info; 30 url::CanonicalizeHostVerbose(alias.data(), url::Component(0, alias.size()), 31 &output, &host_info); 32 33 if (host_info.family == url::CanonHostInfo::Family::BROKEN) { 34 continue; 35 } 36 37 // IP addresses should have been rejected by IsValidDnsRecordName(). 38 DCHECK_NE(host_info.family, url::CanonHostInfo::Family::IPV4); 39 DCHECK_NE(host_info.family, url::CanonHostInfo::Family::IPV6); 40 41 output.Complete(); 42 fixed_aliases.insert(std::move(canonicalized_alias)); 43 } 44 45 return fixed_aliases; 46 } 47 48 } // namespace net::dns_alias_utility 49