diff src/share/vm/classfile/javaClasses.cpp @ 10155:f258c5828eb8

8011773: Some tests on Interned String crashed JVM with OOM Summary: Instead of terminating the VM, throw OutOfMemoryError exceptions. Reviewed-by: coleenp, dholmes
author hseigel
date Mon, 29 Apr 2013 16:13:57 -0400
parents 6337ca4dcad8
children 6bd680e9ea35 7ee0d5c53c78
line wrap: on
line diff
--- a/src/share/vm/classfile/javaClasses.cpp	Fri Apr 26 08:40:24 2013 -0700
+++ b/src/share/vm/classfile/javaClasses.cpp	Mon Apr 29 16:13:57 2013 -0400
@@ -315,14 +315,18 @@
   return string;
 }
 
-jchar* java_lang_String::as_unicode_string(oop java_string, int& length) {
+jchar* java_lang_String::as_unicode_string(oop java_string, int& length, TRAPS) {
   typeArrayOop value  = java_lang_String::value(java_string);
   int          offset = java_lang_String::offset(java_string);
                length = java_lang_String::length(java_string);
 
-  jchar* result = NEW_RESOURCE_ARRAY(jchar, length);
-  for (int index = 0; index < length; index++) {
-    result[index] = value->char_at(index + offset);
+  jchar* result = NEW_RESOURCE_ARRAY_RETURN_NULL(jchar, length);
+  if (result != NULL) {
+    for (int index = 0; index < length; index++) {
+      result[index] = value->char_at(index + offset);
+    }
+  } else {
+    THROW_MSG_0(vmSymbols::java_lang_OutOfMemoryError(), "could not allocate Unicode string");
   }
   return result;
 }