< prev index next >

src/windows/native/sun/windows/awt_Font.cpp

Print this page
rev 12530 : 8170218: Improved Font Metrics
Reviewed-by: prr

*** 842,856 **** { TRY; if (str == NULL) { JNU_ThrowNullPointerException(env, "str argument"); ! return NULL; } ! if ((len < 0) || (off < 0) || (len + off > (env->GetArrayLength(str)))) { JNU_ThrowArrayIndexOutOfBoundsException(env, "off/len argument"); ! return NULL; } jchar *strp = new jchar[len]; env->GetCharArrayRegion(str, off, len, strp); jstring jstr = env->NewString(strp, len); --- 842,861 ---- { TRY; if (str == NULL) { JNU_ThrowNullPointerException(env, "str argument"); ! return 0; } ! if ((len < 0) || (off < 0) || (len + off < 0) || ! (len + off > (env->GetArrayLength(str)))) { JNU_ThrowArrayIndexOutOfBoundsException(env, "off/len argument"); ! return 0; ! } ! ! if (off == env->GetArrayLength(str)) { ! return 0; } jchar *strp = new jchar[len]; env->GetCharArrayRegion(str, off, len, strp); jstring jstr = env->NewString(strp, len);
*** 878,916 **** { TRY; if (str == NULL) { JNU_ThrowNullPointerException(env, "bytes argument"); ! return NULL; } ! if ((len < 0) || (off < 0) || (len + off > (env->GetArrayLength(str)))) { JNU_ThrowArrayIndexOutOfBoundsException(env, "off or len argument"); ! return NULL; } char *pStrBody = NULL; jint result = 0; try { jintArray array = (jintArray)env->GetObjectField(self, AwtFont::widthsID); if (array == NULL) { JNU_ThrowNullPointerException(env, "Can't access widths array."); ! return NULL; } pStrBody = (char *)env->GetPrimitiveArrayCritical(str, 0); if (pStrBody == NULL) { JNU_ThrowNullPointerException(env, "Can't access str bytes."); ! return NULL; } char *pStr = pStrBody + off; jint *widths = NULL; try { widths = (jint *)env->GetPrimitiveArrayCritical(array, 0); if (widths == NULL) { env->ReleasePrimitiveArrayCritical(str, pStrBody, 0); JNU_ThrowNullPointerException(env, "Can't access widths."); ! return NULL; } for (; len; len--) { result += widths[*pStr++]; } } catch (...) { --- 883,927 ---- { TRY; if (str == NULL) { JNU_ThrowNullPointerException(env, "bytes argument"); ! return 0; } ! if ((len < 0) || (off < 0) || (len + off < 0) || ! (len + off > (env->GetArrayLength(str)))) { JNU_ThrowArrayIndexOutOfBoundsException(env, "off or len argument"); ! return 0; } + + if (off == env->GetArrayLength(str)) { + return 0; + } + char *pStrBody = NULL; jint result = 0; try { jintArray array = (jintArray)env->GetObjectField(self, AwtFont::widthsID); if (array == NULL) { JNU_ThrowNullPointerException(env, "Can't access widths array."); ! return 0; } pStrBody = (char *)env->GetPrimitiveArrayCritical(str, 0); if (pStrBody == NULL) { JNU_ThrowNullPointerException(env, "Can't access str bytes."); ! return 0; } char *pStr = pStrBody + off; jint *widths = NULL; try { widths = (jint *)env->GetPrimitiveArrayCritical(array, 0); if (widths == NULL) { env->ReleasePrimitiveArrayCritical(str, pStrBody, 0); JNU_ThrowNullPointerException(env, "Can't access widths."); ! return 0; } for (; len; len--) { result += widths[*pStr++]; } } catch (...) {
< prev index next >