Title: [260710] trunk/Source/_javascript_Core
Revision
260710
Author
[email protected]
Date
2020-04-25 16:47:40 -0700 (Sat, 25 Apr 2020)

Log Message

Unreviewed fix for JSC Debug tests following r210853.

* runtime/IntlObject.cpp:
(JSC::canonicalizeLanguageTag):
(JSC::canonicalizeLocaleList):
(JSC::defaultLocale):
Deal with unchecked exception by moving tryGetUtf8 call out of canonicalizeLanguageTag; it's meant to
verify the user input from canonicalizeLocaleList and needn't change the noexcept-ness of defaultLocale.

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (260709 => 260710)


--- trunk/Source/_javascript_Core/ChangeLog	2020-04-25 21:28:45 UTC (rev 260709)
+++ trunk/Source/_javascript_Core/ChangeLog	2020-04-25 23:47:40 UTC (rev 260710)
@@ -1,3 +1,14 @@
+2020-04-25  Ross Kirsling  <[email protected]>
+
+        Unreviewed fix for JSC Debug tests following r210853.
+
+        * runtime/IntlObject.cpp:
+        (JSC::canonicalizeLanguageTag):
+        (JSC::canonicalizeLocaleList):
+        (JSC::defaultLocale):
+        Deal with unchecked exception by moving tryGetUtf8 call out of canonicalizeLanguageTag; it's meant to
+        verify the user input from canonicalizeLocaleList and needn't change the noexcept-ness of defaultLocale.
+
 2020-04-25  Alex Christensen  <[email protected]>
 
         Prepare to remove automatic URL->String conversion operators

Modified: trunk/Source/_javascript_Core/runtime/IntlObject.cpp (260709 => 260710)


--- trunk/Source/_javascript_Core/runtime/IntlObject.cpp	2020-04-25 21:28:45 UTC (rev 260709)
+++ trunk/Source/_javascript_Core/runtime/IntlObject.cpp	2020-04-25 23:47:40 UTC (rev 260710)
@@ -313,21 +313,11 @@
 
 // https://tc39.es/ecma402/#sec-isstructurallyvalidlanguagetag
 // https://tc39.es/ecma402/#sec-canonicalizeunicodelocaleid
-static String canonicalizeLanguageTag(JSGlobalObject* globalObject, StringView locale)
+static String canonicalizeLanguageTag(const CString& input)
 {
-    if (locale.isEmpty())
+    if (!input.length())
         return String();
 
-    VM& vm = globalObject->vm();
-    auto scope = DECLARE_THROW_SCOPE(vm);
-
-    auto input = locale.tryGetUtf8();
-    if (!input) {
-        if (input.error() == UTF8ConversionError::OutOfMemory)
-            throwOutOfMemoryError(globalObject, scope);
-        return String();
-    }
-
     // We need to be careful with the output of uloc_forLanguageTag:
     // - uloc_toLanguageTag doesn't take an input size param so we must ensure the string is null-terminated ourselves
     // - before ICU 64, there's a chance that it will "buffer overflow" while requesting a *smaller* size
@@ -334,13 +324,13 @@
     UErrorCode status = U_ZERO_ERROR;
     Vector<char, 32> intermediate(31);
     int32_t parsedLength;
-    auto intermediateLength = uloc_forLanguageTag(input.value().data(), intermediate.data(), intermediate.size(), &parsedLength, &status);
+    auto intermediateLength = uloc_forLanguageTag(input.data(), intermediate.data(), intermediate.size(), &parsedLength, &status);
     if (status == U_BUFFER_OVERFLOW_ERROR) {
         intermediate.resize(intermediateLength + 1);
         status = U_ZERO_ERROR;
-        uloc_forLanguageTag(input.value().data(), intermediate.data(), intermediateLength + 1, &parsedLength, &status);
+        uloc_forLanguageTag(input.data(), intermediate.data(), intermediateLength + 1, &parsedLength, &status);
     }
-    if (U_FAILURE(status) || parsedLength != static_cast<int32_t>(input.value().length()))
+    if (U_FAILURE(status) || parsedLength != static_cast<int32_t>(input.length()))
         return String();
 
     Vector<char, 32> result(32);
@@ -412,7 +402,14 @@
             auto tagValue = tag->value(globalObject);
             RETURN_IF_EXCEPTION(scope, Vector<String>());
 
-            String canonicalizedTag = canonicalizeLanguageTag(globalObject, tagValue);
+            auto rawTag = tagValue.tryGetUtf8();
+            if (!rawTag) {
+                if (rawTag.error() == UTF8ConversionError::OutOfMemory)
+                    throwOutOfMemoryError(globalObject, scope);
+                return { };
+            }
+
+            String canonicalizedTag = canonicalizeLanguageTag(rawTag.value());
             if (canonicalizedTag.isNull()) {
                 String errorMessage = tryMakeString("invalid language tag: ", tagValue);
                 if (UNLIKELY(!errorMessage)) {
@@ -463,7 +460,7 @@
     // be determined by WebCore-specific logic like some WK settings. Usually this will return the
     // same thing as userPreferredLanguages()[0].
     if (auto defaultLanguage = globalObject->globalObjectMethodTable()->defaultLanguage) {
-        String locale = canonicalizeLanguageTag(globalObject, defaultLanguage());
+        String locale = canonicalizeLanguageTag(defaultLanguage().utf8());
         if (!locale.isEmpty())
             return locale;
     }
@@ -470,7 +467,7 @@
 
     Vector<String> languages = userPreferredLanguages();
     for (const auto& language : languages) {
-        String locale = canonicalizeLanguageTag(globalObject, language);
+        String locale = canonicalizeLanguageTag(language.utf8());
         if (!locale.isEmpty())
             return locale;
     }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to