Mercurial > hg > truffle
diff src/share/vm/prims/jni.cpp @ 1989:017cd8bce8a8
6539281: -Xcheck:jni should validate char* argument to ReleaseStringUTFChars
Summary: Tag allocated memory with a magic value and verify when releasing.
Reviewed-by: phh, stefank
author | sla |
---|---|
date | Tue, 07 Dec 2010 03:15:45 -0800 |
parents | 828eafbd85cc |
children | 06f017f7daa7 3582bf76420e |
line wrap: on
line diff
--- a/src/share/vm/prims/jni.cpp Mon Dec 06 20:21:15 2010 -0500 +++ b/src/share/vm/prims/jni.cpp Tue Dec 07 03:15:45 2010 -0800 @@ -2113,11 +2113,10 @@ JNI_ENTRY(const char*, jni_GetStringUTFChars(JNIEnv *env, jstring string, jboolean *isCopy)) JNIWrapper("GetStringUTFChars"); DTRACE_PROBE3(hotspot_jni, GetStringUTFChars__entry, env, string, isCopy); - ResourceMark rm; - char* str = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(string)); - int length = (int)strlen(str); - char* result = AllocateHeap(length+1, "GetStringUTFChars"); - strcpy(result, str); + oop java_string = JNIHandles::resolve_non_null(string); + size_t length = java_lang_String::utf8_length(java_string); + char* result = AllocateHeap(length + 1, "GetStringUTFChars"); + java_lang_String::as_utf8_string(java_string, result, (int) length + 1); if (isCopy != NULL) *isCopy = JNI_TRUE; DTRACE_PROBE1(hotspot_jni, GetStringUTFChars__return, result); return result;