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(