From 940c023e09f4750615b97d1eaef7b2b6c997438f Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Wed, 1 Sep 2021 18:54:30 -0400 Subject: [PATCH] LibJS: Compare Unicode locale variants using case-insensitive matching In the IsStructurallyValidLanguageTag AO, we of course cannot assume the variants are canonicalized to lower-case yet, because canonicalization hasn't happened yet. --- .../Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp | 2 +- .../LibJS/Tests/builtins/Intl/Intl.getCanonicalLocales.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp b/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp index 0cc850bd00..7d8fb3ca2a 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp @@ -26,7 +26,7 @@ static Optional is_structurally_valid_language_tag(StringView quick_sort(variants); for (size_t i = 0; i < variants.size() - 1; ++i) { - if (variants[i] == variants[i + 1]) + if (variants[i].equals_ignoring_case(variants[i + 1])) return true; } diff --git a/Userland/Libraries/LibJS/Tests/builtins/Intl/Intl.getCanonicalLocales.js b/Userland/Libraries/LibJS/Tests/builtins/Intl/Intl.getCanonicalLocales.js index ba988aa2d0..4164897e23 100644 --- a/Userland/Libraries/LibJS/Tests/builtins/Intl/Intl.getCanonicalLocales.js +++ b/Userland/Libraries/LibJS/Tests/builtins/Intl/Intl.getCanonicalLocales.js @@ -18,6 +18,13 @@ describe("errors", () => { }); test("duplicate variant subtags", () => { + expect(() => { + Intl.getCanonicalLocales("en-posix-POSIX"); + }).toThrowWithMessage( + RangeError, + "en-posix-POSIX is not a structurally valid language tag" + ); + expect(() => { Intl.getCanonicalLocales("en-POSIX-POSIX"); }).toThrowWithMessage(