From 923ab8658e46194a8ba8e6026f2452a97f6b1929 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Sun, 1 Dec 2024 22:54:06 +1300 Subject: [PATCH] LibUnicode: Support IgnorePunnycode option in ToAscii algorithm This was introduced in UTS 46 revision 31. --- Libraries/LibUnicode/IDNA.cpp | 5 +++++ Libraries/LibUnicode/IDNA.h | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/Libraries/LibUnicode/IDNA.cpp b/Libraries/LibUnicode/IDNA.cpp index 47dc9f75d23..d80b77a8460 100644 --- a/Libraries/LibUnicode/IDNA.cpp +++ b/Libraries/LibUnicode/IDNA.cpp @@ -45,12 +45,17 @@ ErrorOr to_ascii(Utf8View domain_name, ToAsciiOptions const& options) errors &= ~UIDNA_ERROR_LEADING_HYPHEN; errors &= ~UIDNA_ERROR_TRAILING_HYPHEN; } + if (options.verify_dns_length == VerifyDnsLength::No) { errors &= ~UIDNA_ERROR_EMPTY_LABEL; errors &= ~UIDNA_ERROR_LABEL_TOO_LONG; errors &= ~UIDNA_ERROR_DOMAIN_NAME_TOO_LONG; } + if (options.ignore_invalid_punycode == IgnoreInvalidPunycode::Yes) { + errors &= ~UIDNA_ERROR_PUNYCODE; + } + if (icu_failure(status) || errors != 0) return Error::from_string_literal("Unable to convert domain to ASCII"); diff --git a/Libraries/LibUnicode/IDNA.h b/Libraries/LibUnicode/IDNA.h index 8962c5e7e1e..d3f9ea27cbe 100644 --- a/Libraries/LibUnicode/IDNA.h +++ b/Libraries/LibUnicode/IDNA.h @@ -42,6 +42,11 @@ enum class VerifyDnsLength { Yes, }; +enum class IgnoreInvalidPunycode { + No, + Yes, +}; + struct ToAsciiOptions { CheckHyphens check_hyphens { CheckHyphens::Yes }; CheckBidi check_bidi { CheckBidi::Yes }; @@ -49,6 +54,7 @@ struct ToAsciiOptions { UseStd3AsciiRules use_std3_ascii_rules { UseStd3AsciiRules::No }; TransitionalProcessing transitional_processing { TransitionalProcessing::No }; VerifyDnsLength verify_dns_length { VerifyDnsLength::Yes }; + IgnoreInvalidPunycode ignore_invalid_punycode { IgnoreInvalidPunycode::No }; }; ErrorOr to_ascii(Utf8View domain_name, ToAsciiOptions const& = {});