| Index: src/runtime/runtime-i18n.cc
 | 
| diff --git a/src/runtime/runtime-i18n.cc b/src/runtime/runtime-i18n.cc
 | 
| index 6630fadc10b2e3e829b0461101533da836c1eb93..0b45381914641a824e36e99eaa0d315bf96252aa 100644
 | 
| --- a/src/runtime/runtime-i18n.cc
 | 
| +++ b/src/runtime/runtime-i18n.cc
 | 
| @@ -831,6 +831,8 @@ MUST_USE_RESULT Object* LocaleConvertCase(Handle<String> s, Isolate* isolate,
 | 
|    Handle<SeqTwoByteString> result;
 | 
|    std::unique_ptr<uc16[]> sap;
 | 
|  
 | 
| +  if (dest_length == 0) return isolate->heap()->empty_string();
 | 
| +
 | 
|    // This is not a real loop. It'll be executed only once (no overflow) or
 | 
|    // twice (overflow).
 | 
|    for (int i = 0; i < 2; ++i) {
 | 
| @@ -1041,7 +1043,7 @@ MUST_USE_RESULT Object* ConvertToLower(Handle<String> s, Isolate* isolate) {
 | 
|  
 | 
|  MUST_USE_RESULT Object* ConvertToUpper(Handle<String> s, Isolate* isolate) {
 | 
|    int32_t length = s->length();
 | 
| -  if (s->HasOnlyOneByteChars()) {
 | 
| +  if (s->HasOnlyOneByteChars() && length > 0) {
 | 
|      Handle<SeqOneByteString> result =
 | 
|          isolate->factory()->NewRawOneByteString(length).ToHandleChecked();
 | 
|  
 | 
| 
 |