Explorar o código

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.
Timothy Flynn %!s(int64=3) %!d(string=hai) anos
pai
achega
940c023e09

+ 1 - 1
Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp

@@ -26,7 +26,7 @@ static Optional<Unicode::LocaleID> 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;
         }
 

+ 7 - 0
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(