src/share/vm/prims/jni.cpp
Print this page
rev 6283 : redundant memcpy
*** 3148,3162 ****
if (start < 0 || len < 0 || start + len > s_len) {
THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException());
} else {
//%note jni_7
if (len > 0) {
! ResourceMark rm(THREAD);
! char *utf_region = java_lang_String::as_utf8_string(s, start, len);
! int utf_len = (int)strlen(utf_region);
! memcpy(buf, utf_region, utf_len);
! buf[utf_len] = 0;
} else {
// JDK null-terminates the buffer even in len is zero
if (buf != NULL) {
buf[0] = 0;
}
--- 3148,3160 ----
if (start < 0 || len < 0 || start + len > s_len) {
THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException());
} else {
//%note jni_7
if (len > 0) {
! // Assume the buffer is large enough as the JNI spec. does not require user error checking
! java_lang_String::as_utf8_string(s, start, len, buf, INT_MAX);
! // as_utf8_string null-terminates the result string
} else {
// JDK null-terminates the buffer even in len is zero
if (buf != NULL) {
buf[0] = 0;
}
*** 3878,3887 ****
--- 3876,3886 ----
void TestVirtualSpaceNode_test();
void TestNewSize_test();
void TestOldSize_test();
void TestKlass_test();
void TestBitMap_test();
+ void TestAsUtf8();
#if INCLUDE_ALL_GCS
void TestOldFreeSpaceCalculation_test();
void TestG1BiasedArray_test();
void TestBufferingOopClosure_test();
void TestCodeCacheRemSet_test();
*** 3905,3914 ****
--- 3904,3914 ----
run_unit_test(test_loggc_filename());
run_unit_test(TestNewSize_test());
run_unit_test(TestOldSize_test());
run_unit_test(TestKlass_test());
run_unit_test(TestBitMap_test());
+ run_unit_test(TestAsUtf8());
#if INCLUDE_VM_STRUCTS
run_unit_test(VMStructs::test());
#endif
#if INCLUDE_ALL_GCS
run_unit_test(TestOldFreeSpaceCalculation_test());