# HG changeset patch # User rprotacio # Date 1497290289 14400 # Node ID ef94d044f198ba488361a152344128fdbfc342ed # Parent 2adb5e9f0e9f21e19249eb856fa9890de7e0da62 8181664: Improve JVM UTF String handling Reviewed-by: mschoene, coleenp, rhalade, acorn, gtriantafill Contributed-by: rachel.protacio@oracle.com diff -r 2adb5e9f0e9f -r ef94d044f198 src/share/vm/prims/jni.cpp --- a/src/share/vm/prims/jni.cpp Tue Jun 13 22:00:40 2017 -0700 +++ b/src/share/vm/prims/jni.cpp Mon Jun 12 13:58:09 2017 -0400 @@ -3841,7 +3841,7 @@ EntryProbe; \ DT_VOID_RETURN_MARK(Get##Result##ArrayRegion); \ typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \ - if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)src->length())) { \ + if (start < 0 || len < 0 || (start > src->length() - len)) { \ THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \ } else { \ if (len > 0) { \ @@ -3925,7 +3925,7 @@ EntryProbe; \ DT_VOID_RETURN_MARK(Set##Result##ArrayRegion); \ typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \ - if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)dst->length())) { \ + if (start < 0 || len < 0 || (start > dst->length() - len)) { \ THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \ } else { \ if (len > 0) { \ @@ -4207,7 +4207,7 @@ DT_VOID_RETURN_MARK(GetStringRegion); oop s = JNIHandles::resolve_non_null(string); int s_len = java_lang_String::length(s); - if (start < 0 || len < 0 || start + len > s_len) { + if (start < 0 || len < 0 || start > s_len - len) { THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException()); } else { if (len > 0) { @@ -4236,7 +4236,7 @@ DT_VOID_RETURN_MARK(GetStringUTFRegion); oop s = JNIHandles::resolve_non_null(string); int s_len = java_lang_String::length(s); - if (start < 0 || len < 0 || start + len > s_len) { + if (start < 0 || len < 0 || start > s_len - len) { THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException()); } else { //%note jni_7