6539281: -Xcheck:jni should validate char* argument to ReleaseStringUTFChars

Tag allocated memory with a magic value and verify when releasing.

Reviewed-by: phh, stefank
This commit is contained in:
Staffan Larsen 2010-12-07 03:15:45 -08:00
parent dd62e29b29
commit 1765b0fbf0
4 changed files with 65 additions and 17 deletions

View file

@ -2113,11 +2113,10 @@ JNI_END
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;