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