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;
}