< prev index next >
src/windows/native/sun/windows/awt_Font.cpp
Print this page
rev 12530 : 8170218: Improved Font Metrics
Reviewed-by: prr
@@ -842,15 +842,20 @@
{
TRY;
if (str == NULL) {
JNU_ThrowNullPointerException(env, "str argument");
- return NULL;
+ return 0;
}
- if ((len < 0) || (off < 0) || (len + off > (env->GetArrayLength(str)))) {
+ if ((len < 0) || (off < 0) || (len + off < 0) ||
+ (len + off > (env->GetArrayLength(str)))) {
JNU_ThrowArrayIndexOutOfBoundsException(env, "off/len argument");
- return NULL;
+ 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,39 +883,45 @@
{
TRY;
if (str == NULL) {
JNU_ThrowNullPointerException(env, "bytes argument");
- return NULL;
+ return 0;
}
- if ((len < 0) || (off < 0) || (len + off > (env->GetArrayLength(str)))) {
+ if ((len < 0) || (off < 0) || (len + off < 0) ||
+ (len + off > (env->GetArrayLength(str)))) {
JNU_ThrowArrayIndexOutOfBoundsException(env, "off or len argument");
- return NULL;
+ 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 NULL;
+ return 0;
}
pStrBody = (char *)env->GetPrimitiveArrayCritical(str, 0);
if (pStrBody == NULL) {
JNU_ThrowNullPointerException(env, "Can't access str bytes.");
- return NULL;
+ 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 NULL;
+ return 0;
}
for (; len; len--) {
result += widths[*pStr++];
}
} catch (...) {
< prev index next >