aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/classfile/javaClasses.cpp
diff options
context:
space:
mode:
authorhseigel <none@none>2013-04-29 16:13:57 -0400
committerhseigel <none@none>2013-04-29 16:13:57 -0400
commit27f18fb8491f9b8b89cf0cb099d7d1fd5e00f902 (patch)
treeeaa8a77f07b612c43a6d70c301a02e5ac80b89b0 /src/share/vm/classfile/javaClasses.cpp
parent386a9770f9195b532a9d9845389dd03db2ef1a4e (diff)
downloadjdk8u_hotspot-27f18fb8491f9b8b89cf0cb099d7d1fd5e00f902.tar.gz
8011773: Some tests on Interned String crashed JVM with OOM
Summary: Instead of terminating the VM, throw OutOfMemoryError exceptions. Reviewed-by: coleenp, dholmes
Diffstat (limited to 'src/share/vm/classfile/javaClasses.cpp')
-rw-r--r--src/share/vm/classfile/javaClasses.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/share/vm/classfile/javaClasses.cpp b/src/share/vm/classfile/javaClasses.cpp
index 527da053a..bb02a6d86 100644
--- a/src/share/vm/classfile/javaClasses.cpp
+++ b/src/share/vm/classfile/javaClasses.cpp
@@ -315,14 +315,18 @@ Handle java_lang_String::char_converter(Handle java_string, jchar from_char, jch
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;
}