| Index: src/heap.cc
 | 
| diff --git a/src/heap.cc b/src/heap.cc
 | 
| index 685cbea99737bb51afe535379c4fb04f4fc7da42..8de945505036f1638df233654716c7698ba2699c 100644
 | 
| --- a/src/heap.cc
 | 
| +++ b/src/heap.cc
 | 
| @@ -1872,20 +1872,23 @@ Object* Heap::AllocateSubString(String* buffer,
 | 
|  Object* Heap::AllocateExternalStringFromAscii(
 | 
|      ExternalAsciiString::Resource* resource) {
 | 
|    Map* map;
 | 
| -  int length = resource->length();
 | 
| -  if (length <= String::kMaxShortSize) {
 | 
| +  size_t length = resource->length();
 | 
| +  if (length <= static_cast<size_t>(String::kMaxShortSize)) {
 | 
|      map = short_external_ascii_string_map();
 | 
| -  } else if (length <= String::kMaxMediumSize) {
 | 
| +  } else if (length <= static_cast<size_t>(String::kMaxMediumSize)) {
 | 
|      map = medium_external_ascii_string_map();
 | 
| -  } else {
 | 
| +  } else if (length <= static_cast<size_t>(String::kMaxLength)) {
 | 
|      map = long_external_ascii_string_map();
 | 
| +  } else {
 | 
| +    Top::context()->mark_out_of_memory();
 | 
| +    return Failure::OutOfMemoryException();
 | 
|    }
 | 
|  
 | 
|    Object* result = Allocate(map, NEW_SPACE);
 | 
|    if (result->IsFailure()) return result;
 | 
|  
 | 
|    ExternalAsciiString* external_string = ExternalAsciiString::cast(result);
 | 
| -  external_string->set_length(length);
 | 
| +  external_string->set_length(static_cast<int>(length));
 | 
|    external_string->set_resource(resource);
 | 
|  
 | 
|    return result;
 | 
| @@ -1894,14 +1897,17 @@ Object* Heap::AllocateExternalStringFromAscii(
 | 
|  
 | 
|  Object* Heap::AllocateExternalStringFromTwoByte(
 | 
|      ExternalTwoByteString::Resource* resource) {
 | 
| -  int length = resource->length();
 | 
| -
 | 
| -  Map* map = ExternalTwoByteString::StringMap(length);
 | 
| +  size_t length = resource->length();
 | 
| +  if (length > static_cast<size_t>(String::kMaxLength)) {
 | 
| +    Top::context()->mark_out_of_memory();
 | 
| +    return Failure::OutOfMemoryException();
 | 
| +  }
 | 
| +  Map* map = ExternalTwoByteString::StringMap(static_cast<int>(length));
 | 
|    Object* result = Allocate(map, NEW_SPACE);
 | 
|    if (result->IsFailure()) return result;
 | 
|  
 | 
|    ExternalTwoByteString* external_string = ExternalTwoByteString::cast(result);
 | 
| -  external_string->set_length(length);
 | 
| +  external_string->set_length(static_cast<int>(length));
 | 
|    external_string->set_resource(resource);
 | 
|  
 | 
|    return result;
 | 
| 
 |