* Verify that "obj" is a valid object, and that it's an object that JNI
* is allowed to know about. We allow NULL references.
*
- * The caller should have switched to "running" mode before calling here.
+ * Switches to "running" mode before performing checks.
*/
static void checkObject(JNIEnv* env, jobject obj, const char* func)
{
if (obj == NULL)
return;
+
+ JNI_ENTER();
if (!dvmIsValidObject(obj)) {
LOGW("JNI WARNING: native code passing in bad object %p (%s)\n",
obj, func);
showLocation(dvmGetCurrentJNIMethod(), func);
abortMaybe();
}
+
+ JNI_EXIT();
}
/*
LOGW("JNI WARNING: jclass does not point to class object (%p - %s)\n",
jclazz, clazz->descriptor);
printWarn = true;
- } else {
- checkObject(env, jclazz, func);
}
+ JNI_EXIT();
if (printWarn)
abortMaybe();
-
- JNI_EXIT();
+ else
+ checkObject(env, jclazz, func);
}
/*
else
LOGW("JNI WARNING: jstring %p is bogus (%s)\n", str, func);
printWarn = true;
- } else {
- checkObject(env, str, func);
}
+ JNI_EXIT();
if (printWarn)
abortMaybe();
-
- JNI_EXIT();
+ else
+ checkObject(env, str, func);
}
/*
else
LOGW("JNI WARNING: jarray is bogus (%p)\n", array);
printWarn = true;
- } else {
- checkObject(env, array, func);
}
+ JNI_EXIT();
+
if (printWarn)
abortMaybe();
-
- JNI_EXIT();
+ else
+ checkObject(env, array, func);
}
/*
static void checkInstanceFieldID(JNIEnv* env, jobject obj, jfieldID fieldID,
const char* func)
{
+ JNI_ENTER();
+
if (obj == NULL) {
LOGW("JNI WARNING: invalid null object (%s)\n", func);
abortMaybe();
- return;
+ goto bail;
}
ClassObject* clazz = ((Object*)obj)->clazz;
if ((InstField*) fieldID >= clazz->ifields &&
(InstField*) fieldID < clazz->ifields + clazz->ifieldCount)
{
- return;
+ goto bail;
}
clazz = clazz->super;
LOGW("JNI WARNING: inst fieldID %p not valid for class %s\n",
fieldID, ((Object*)obj)->clazz->descriptor);
abortMaybe();
+
+bail:
+ JNI_EXIT();
}