Mercurial > hg > truffle
comparison 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 |
comparison
equal
deleted
inserted
replaced
1988:684faacebf20 | 1989:017cd8bce8a8 |
---|---|
2111 | 2111 |
2112 | 2112 |
2113 JNI_ENTRY(const char*, jni_GetStringUTFChars(JNIEnv *env, jstring string, jboolean *isCopy)) | 2113 JNI_ENTRY(const char*, jni_GetStringUTFChars(JNIEnv *env, jstring string, jboolean *isCopy)) |
2114 JNIWrapper("GetStringUTFChars"); | 2114 JNIWrapper("GetStringUTFChars"); |
2115 DTRACE_PROBE3(hotspot_jni, GetStringUTFChars__entry, env, string, isCopy); | 2115 DTRACE_PROBE3(hotspot_jni, GetStringUTFChars__entry, env, string, isCopy); |
2116 ResourceMark rm; | 2116 oop java_string = JNIHandles::resolve_non_null(string); |
2117 char* str = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(string)); | 2117 size_t length = java_lang_String::utf8_length(java_string); |
2118 int length = (int)strlen(str); | 2118 char* result = AllocateHeap(length + 1, "GetStringUTFChars"); |
2119 char* result = AllocateHeap(length+1, "GetStringUTFChars"); | 2119 java_lang_String::as_utf8_string(java_string, result, (int) length + 1); |
2120 strcpy(result, str); | |
2121 if (isCopy != NULL) *isCopy = JNI_TRUE; | 2120 if (isCopy != NULL) *isCopy = JNI_TRUE; |
2122 DTRACE_PROBE1(hotspot_jni, GetStringUTFChars__return, result); | 2121 DTRACE_PROBE1(hotspot_jni, GetStringUTFChars__return, result); |
2123 return result; | 2122 return result; |
2124 JNI_END | 2123 JNI_END |
2125 | 2124 |