Index: src/runtime/runtime-i18n.cc |
diff --git a/src/runtime/runtime-i18n.cc b/src/runtime/runtime-i18n.cc |
index 7d2594cd327fa6db1246110a17083ef7096160c3..fb6fbe76070ac667d73b72ee75e515fe9913e1f1 100644 |
--- a/src/runtime/runtime-i18n.cc |
+++ b/src/runtime/runtime-i18n.cc |
@@ -859,8 +859,10 @@ MUST_USE_RESULT Object* LocaleConvertCase(Handle<String> s, Isolate* isolate, |
// This is not a real loop. It'll be executed only once (no overflow) or |
// twice (overflow). |
for (int i = 0; i < 2; ++i) { |
- result = |
- isolate->factory()->NewRawTwoByteString(dest_length).ToHandleChecked(); |
+ // Case conversion can increase the string length (e.g. sharp-S => SS) so |
+ // that we have to handle RangeError exceptions here. |
+ ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
+ isolate, result, isolate->factory()->NewRawTwoByteString(dest_length)); |
DisallowHeapAllocation no_gc; |
String::FlatContent flat = s->GetFlatContent(); |
const UChar* src = GetUCharBufferFromFlat(flat, &sap, src_length); |