diff options
Diffstat (limited to 'libjava/jni.cc')
-rw-r--r-- | libjava/jni.cc | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/libjava/jni.cc b/libjava/jni.cc index 6190f4f..34f2995 100644 --- a/libjava/jni.cc +++ b/libjava/jni.cc @@ -1364,7 +1364,9 @@ _Jv_JNI_GetPrimitiveArrayRegion (JNIEnv *env, JArray<T> *array, jsize start, jsize len, T *buf) { - if (start < 0 || len >= array->length || start + len >= array->length) + // The cast to unsigned lets us save a comparison. + if (start < 0 || len < 0 + || (unsigned long) (start + len) >= (unsigned long) array->length) { try { @@ -1389,7 +1391,9 @@ static void _Jv_JNI_SetPrimitiveArrayRegion (JNIEnv *env, JArray<T> *array, jsize start, jsize len, T *buf) { - if (start < 0 || len >= array->length || start + len >= array->length) + // The cast to unsigned lets us save a comparison. + if (start < 0 || len < 0 + || (unsigned long) (start + len) >= (unsigned long) array->length) { try { @@ -1432,7 +1436,8 @@ _Jv_JNI_MonitorEnter (JNIEnv *env, jobject obj) { try { - return _Jv_MonitorEnter (obj); + _Jv_MonitorEnter (obj); + return 0; } catch (jthrowable t) { @@ -1446,7 +1451,8 @@ _Jv_JNI_MonitorExit (JNIEnv *env, jobject obj) { try { - return _Jv_MonitorExit (obj); + _Jv_MonitorExit (obj); + return 0; } catch (jthrowable t) { |