// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifdef UNSAFE_BUFFERS_BUILD // TODO(crbug.com/40285824): Remove this and convert code to safer constructs. #pragma allow_unsafe_buffers #endif // This binary takes a list of domain names in ASCII or unicode, passes them // through the IDN decoding algorithm and prints out the result. The list can be // passed as a text file or via stdin. In both cases, the output is printed as // (input_domain, output_domain, spoof_check_result) tuples on separate lines. // spoof_check_result is the string representation of IDNSpoofChecker::Result // enum with an additional kTopDomainLookalike value. #include <cstdlib> #include <fstream> #include <iostream> #include <string> #include "base/command_line.h" #include "base/i18n/icu_util.h" #include "base/logging.h" #include "base/notreached.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "components/url_formatter/spoof_checks/idn_spoof_checker.h" #include "components/url_formatter/url_formatter.h" #include "url/gurl.h" IDNConversionResult; IDNSpoofChecker; void PrintUsage(const char* process_name) { … } std::string SpoofCheckResultToString(IDNSpoofChecker::Result result) { … } // Returns the spoof check result as a string. |ascii_domain| must contain // ASCII characters only. |unicode_domain| is the IDN conversion result // according to url_formatter. It can be either punycode or unicode. std::string GetSpoofCheckResult(const std::string& ascii_domain, const std::u16string& unicode_domain) { … } void Convert(std::istream& input) { … } int main(int argc, char* argv[]) { … }