8181664: Improve JVM UTF String handling

Mon, 12 Jun 2017 13:58:09 -0400

author
rprotacio
date
Mon, 12 Jun 2017 13:58:09 -0400
changeset 8962
8aa5e0006ee3
parent 8961
b0b6bdcf22f0
child 8981
1ba859a58587
child 8982
8f1acbb637e3

8181664: Improve JVM UTF String handling
Reviewed-by: mschoene, coleenp, rhalade, acorn, gtriantafill
Contributed-by: rachel.protacio@oracle.com

src/share/vm/prims/jni.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/prims/jni.cpp	Tue Jun 13 22:00:40 2017 -0700
     1.2 +++ b/src/share/vm/prims/jni.cpp	Mon Jun 12 13:58:09 2017 -0400
     1.3 @@ -3832,7 +3832,7 @@
     1.4    EntryProbe; \
     1.5    DT_VOID_RETURN_MARK(Get##Result##ArrayRegion); \
     1.6    typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \
     1.7 -  if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)src->length())) { \
     1.8 +  if (start < 0 || len < 0 || (start > src->length() - len)) { \
     1.9      THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
    1.10    } else { \
    1.11      if (len > 0) { \
    1.12 @@ -3916,7 +3916,7 @@
    1.13    EntryProbe; \
    1.14    DT_VOID_RETURN_MARK(Set##Result##ArrayRegion); \
    1.15    typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \
    1.16 -  if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)dst->length())) { \
    1.17 +  if (start < 0 || len < 0 || (start > dst->length() - len)) { \
    1.18      THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
    1.19    } else { \
    1.20      if (len > 0) { \
    1.21 @@ -4200,7 +4200,7 @@
    1.22    DT_VOID_RETURN_MARK(GetStringRegion);
    1.23    oop s = JNIHandles::resolve_non_null(string);
    1.24    int s_len = java_lang_String::length(s);
    1.25 -  if (start < 0 || len < 0 || start + len > s_len) {
    1.26 +  if (start < 0 || len < 0 || start > s_len - len) {
    1.27      THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException());
    1.28    } else {
    1.29      if (len > 0) {
    1.30 @@ -4229,7 +4229,7 @@
    1.31    DT_VOID_RETURN_MARK(GetStringUTFRegion);
    1.32    oop s = JNIHandles::resolve_non_null(string);
    1.33    int s_len = java_lang_String::length(s);
    1.34 -  if (start < 0 || len < 0 || start + len > s_len) {
    1.35 +  if (start < 0 || len < 0 || start > s_len - len) {
    1.36      THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException());
    1.37    } else {
    1.38      //%note jni_7

mercurial