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(); |