< prev index next >
src/hotspot/share/prims/jniCheck.cpp
Print this page
*** 446,465 ****
Method* jniCheck::validate_jmethod_id(JavaThread* thr, jmethodID method_id) {
ASSERT_OOPS_ALLOWED;
// do the fast jmethodID check first
! Method* moop = Method::checked_resolve_jmethod_id(method_id);
! if (moop == NULL) {
ReportJNIFatalError(thr, fatal_wrong_class_or_method);
}
! // jmethodIDs are supposed to be weak handles in the class loader data,
// but that can be expensive so check it last
else if (!Method::is_method_id(method_id)) {
ReportJNIFatalError(thr, fatal_non_weak_method);
}
! return moop;
}
oop jniCheck::validate_object(JavaThread* thr, jobject obj) {
if (obj == NULL) return NULL;
--- 446,465 ----
Method* jniCheck::validate_jmethod_id(JavaThread* thr, jmethodID method_id) {
ASSERT_OOPS_ALLOWED;
// do the fast jmethodID check first
! Method* m = Method::checked_resolve_jmethod_id(method_id);
! if (m == NULL) {
ReportJNIFatalError(thr, fatal_wrong_class_or_method);
}
! // jmethodIDs are handles in the class loader data,
// but that can be expensive so check it last
else if (!Method::is_method_id(method_id)) {
ReportJNIFatalError(thr, fatal_non_weak_method);
}
! return m;
}
oop jniCheck::validate_object(JavaThread* thr, jobject obj) {
if (obj == NULL) return NULL;
*** 523,537 ****
ASSERT_OOPS_ALLOWED;
jniCheck::validate_jmethod_id(thr, method_id);
jniCheck::validate_object(thr, obj);
}
! void jniCheck::validate_call_class(JavaThread* thr, jclass clazz, jmethodID method_id) {
! /* validate the class being passed */
ASSERT_OOPS_ALLOWED;
! jniCheck::validate_jmethod_id(thr, method_id);
! jniCheck::validate_class(thr, clazz, false);
}
/*
* IMPLEMENTATION OF FUNCTIONS IN CHECKED TABLE
--- 523,544 ----
ASSERT_OOPS_ALLOWED;
jniCheck::validate_jmethod_id(thr, method_id);
jniCheck::validate_object(thr, obj);
}
! void jniCheck::validate_call_class(JavaThread* thr, jclass clazz, jmethodID method_id, jobject obj) {
ASSERT_OOPS_ALLOWED;
! Method* m = jniCheck::validate_jmethod_id(thr, method_id);
! Klass* k = jniCheck::validate_class(thr, clazz, false);
! if (obj != NULL) {
! jniCheck::validate_object(thr, obj);
! }
!
! // Check that method is in the class, must be InstanceKlass
! if (!InstanceKlass::cast(k)->is_subtype_of(m->method_holder())) {
! ReportJNIFatalError(thr, fatal_wrong_class_or_method);
! }
}
/*
* IMPLEMENTATION OF FUNCTIONS IN CHECKED TABLE
*** 593,604 ****
jclass cls,
jmethodID methodID,
jboolean isStatic))
functionEnter(thr);
IN_VM(
! jniCheck::validate_class(thr, cls, false);
! jniCheck::validate_jmethod_id(thr, methodID);
)
jobject result = UNCHECKED()->ToReflectedMethod(env, cls, methodID,
isStatic);
functionExit(thr);
return result;
--- 600,610 ----
jclass cls,
jmethodID methodID,
jboolean isStatic))
functionEnter(thr);
IN_VM(
! jniCheck::validate_call_class(thr, cls, methodID);
)
jobject result = UNCHECKED()->ToReflectedMethod(env, cls, methodID,
isStatic);
functionExit(thr);
return result;
*** 850,861 ****
jmethodID methodID,
...))
functionEnter(thr);
va_list args;
IN_VM(
! jniCheck::validate_class(thr, clazz, false);
! jniCheck::validate_jmethod_id(thr, methodID);
)
va_start(args, methodID);
jobject result = UNCHECKED()->NewObjectV(env,clazz,methodID,args);
va_end(args);
functionExit(thr);
--- 856,866 ----
jmethodID methodID,
...))
functionEnter(thr);
va_list args;
IN_VM(
! jniCheck::validate_call_class(thr, clazz, methodID);
)
va_start(args, methodID);
jobject result = UNCHECKED()->NewObjectV(env,clazz,methodID,args);
va_end(args);
functionExit(thr);
*** 867,878 ****
jclass clazz,
jmethodID methodID,
va_list args))
functionEnter(thr);
IN_VM(
! jniCheck::validate_class(thr, clazz, false);
! jniCheck::validate_jmethod_id(thr, methodID);
)
jobject result = UNCHECKED()->NewObjectV(env,clazz,methodID,args);
functionExit(thr);
return result;
JNI_END
--- 872,882 ----
jclass clazz,
jmethodID methodID,
va_list args))
functionEnter(thr);
IN_VM(
! jniCheck::validate_call_class(thr, clazz, methodID);
)
jobject result = UNCHECKED()->NewObjectV(env,clazz,methodID,args);
functionExit(thr);
return result;
JNI_END
*** 882,893 ****
jclass clazz,
jmethodID methodID,
const jvalue *args))
functionEnter(thr);
IN_VM(
! jniCheck::validate_class(thr, clazz, false);
! jniCheck::validate_jmethod_id(thr, methodID);
)
jobject result = UNCHECKED()->NewObjectA(env,clazz,methodID,args);
functionExit(thr);
return result;
JNI_END
--- 886,896 ----
jclass clazz,
jmethodID methodID,
const jvalue *args))
functionEnter(thr);
IN_VM(
! jniCheck::validate_call_class(thr, clazz, methodID);
)
jobject result = UNCHECKED()->NewObjectA(env,clazz,methodID,args);
functionExit(thr);
return result;
JNI_END
*** 1047,1058 ****
jmethodID methodID, \
...)) \
functionEnter(thr); \
va_list args; \
IN_VM( \
! jniCheck::validate_call_object(thr, obj, methodID); \
! jniCheck::validate_call_class(thr, clazz, methodID); \
) \
va_start(args,methodID); \
ResultType result = UNCHECKED()->CallNonvirtual##Result##MethodV(env, \
obj, \
clazz, \
--- 1050,1060 ----
jmethodID methodID, \
...)) \
functionEnter(thr); \
va_list args; \
IN_VM( \
! jniCheck::validate_call_class(thr, clazz, methodID, obj); \
) \
va_start(args,methodID); \
ResultType result = UNCHECKED()->CallNonvirtual##Result##MethodV(env, \
obj, \
clazz, \
*** 1070,1081 ****
jclass clazz, \
jmethodID methodID, \
va_list args)) \
functionEnter(thr); \
IN_VM( \
! jniCheck::validate_call_object(thr, obj, methodID); \
! jniCheck::validate_call_class(thr, clazz, methodID); \
) \
ResultType result = UNCHECKED()->CallNonvirtual##Result##MethodV(env, \
obj, \
clazz, \
methodID,\
--- 1072,1082 ----
jclass clazz, \
jmethodID methodID, \
va_list args)) \
functionEnter(thr); \
IN_VM( \
! jniCheck::validate_call_class(thr, clazz, methodID, obj); \
) \
ResultType result = UNCHECKED()->CallNonvirtual##Result##MethodV(env, \
obj, \
clazz, \
methodID,\
*** 1091,1102 ****
jclass clazz, \
jmethodID methodID, \
const jvalue * args)) \
functionEnter(thr); \
IN_VM( \
! jniCheck::validate_call_object(thr, obj, methodID); \
! jniCheck::validate_call_class(thr, clazz, methodID); \
) \
ResultType result = UNCHECKED()->CallNonvirtual##Result##MethodA(env, \
obj, \
clazz, \
methodID,\
--- 1092,1102 ----
jclass clazz, \
jmethodID methodID, \
const jvalue * args)) \
functionEnter(thr); \
IN_VM( \
! jniCheck::validate_call_class(thr, clazz, methodID, obj); \
) \
ResultType result = UNCHECKED()->CallNonvirtual##Result##MethodA(env, \
obj, \
clazz, \
methodID,\
*** 1123,1134 ****
jmethodID methodID,
...))
functionEnter(thr);
va_list args;
IN_VM(
! jniCheck::validate_call_object(thr, obj, methodID);
! jniCheck::validate_call_class(thr, clazz, methodID);
)
va_start(args,methodID);
UNCHECKED()->CallNonvirtualVoidMethodV(env,obj,clazz,methodID,args);
va_end(args);
thr->set_pending_jni_exception_check("CallNonvirtualVoidMethod");
--- 1123,1133 ----
jmethodID methodID,
...))
functionEnter(thr);
va_list args;
IN_VM(
! jniCheck::validate_call_class(thr, clazz, methodID, obj);
)
va_start(args,methodID);
UNCHECKED()->CallNonvirtualVoidMethodV(env,obj,clazz,methodID,args);
va_end(args);
thr->set_pending_jni_exception_check("CallNonvirtualVoidMethod");
*** 1141,1152 ****
jclass clazz,
jmethodID methodID,
va_list args))
functionEnter(thr);
IN_VM(
! jniCheck::validate_call_object(thr, obj, methodID);
! jniCheck::validate_call_class(thr, clazz, methodID);
)
UNCHECKED()->CallNonvirtualVoidMethodV(env,obj,clazz,methodID,args);
thr->set_pending_jni_exception_check("CallNonvirtualVoidMethodV");
functionExit(thr);
JNI_END
--- 1140,1150 ----
jclass clazz,
jmethodID methodID,
va_list args))
functionEnter(thr);
IN_VM(
! jniCheck::validate_call_class(thr, clazz, methodID, obj);
)
UNCHECKED()->CallNonvirtualVoidMethodV(env,obj,clazz,methodID,args);
thr->set_pending_jni_exception_check("CallNonvirtualVoidMethodV");
functionExit(thr);
JNI_END
*** 1157,1168 ****
jclass clazz,
jmethodID methodID,
const jvalue * args))
functionEnter(thr);
IN_VM(
! jniCheck::validate_call_object(thr, obj, methodID);
! jniCheck::validate_call_class(thr, clazz, methodID);
)
UNCHECKED()->CallNonvirtualVoidMethodA(env,obj,clazz,methodID,args);
thr->set_pending_jni_exception_check("CallNonvirtualVoidMethodA");
functionExit(thr);
JNI_END
--- 1155,1165 ----
jclass clazz,
jmethodID methodID,
const jvalue * args))
functionEnter(thr);
IN_VM(
! jniCheck::validate_call_class(thr, clazz, methodID, obj);
)
UNCHECKED()->CallNonvirtualVoidMethodA(env,obj,clazz,methodID,args);
thr->set_pending_jni_exception_check("CallNonvirtualVoidMethodA");
functionExit(thr);
JNI_END
*** 1251,1262 ****
jmethodID methodID, \
...)) \
functionEnter(thr); \
va_list args; \
IN_VM( \
! jniCheck::validate_jmethod_id(thr, methodID); \
! jniCheck::validate_class(thr, clazz, false); \
) \
va_start(args,methodID); \
ReturnType result = UNCHECKED()->CallStatic##Result##MethodV(env, \
clazz, \
methodID, \
--- 1248,1258 ----
jmethodID methodID, \
...)) \
functionEnter(thr); \
va_list args; \
IN_VM( \
! jniCheck::validate_call_class(thr, clazz, methodID); \
) \
va_start(args,methodID); \
ReturnType result = UNCHECKED()->CallStatic##Result##MethodV(env, \
clazz, \
methodID, \
*** 1272,1283 ****
jclass clazz, \
jmethodID methodID,\
va_list args)) \
functionEnter(thr); \
IN_VM( \
! jniCheck::validate_jmethod_id(thr, methodID); \
! jniCheck::validate_class(thr, clazz, false); \
) \
ReturnType result = UNCHECKED()->CallStatic##Result##MethodV(env, \
clazz, \
methodID, \
args); \
--- 1268,1278 ----
jclass clazz, \
jmethodID methodID,\
va_list args)) \
functionEnter(thr); \
IN_VM( \
! jniCheck::validate_call_class(thr, clazz, methodID); \
) \
ReturnType result = UNCHECKED()->CallStatic##Result##MethodV(env, \
clazz, \
methodID, \
args); \
*** 1291,1302 ****
jclass clazz, \
jmethodID methodID, \
const jvalue *args)) \
functionEnter(thr); \
IN_VM( \
! jniCheck::validate_jmethod_id(thr, methodID); \
! jniCheck::validate_class(thr, clazz, false); \
) \
ReturnType result = UNCHECKED()->CallStatic##Result##MethodA(env, \
clazz, \
methodID, \
args); \
--- 1286,1296 ----
jclass clazz, \
jmethodID methodID, \
const jvalue *args)) \
functionEnter(thr); \
IN_VM( \
! jniCheck::validate_call_class(thr, clazz, methodID); \
) \
ReturnType result = UNCHECKED()->CallStatic##Result##MethodA(env, \
clazz, \
methodID, \
args); \
*** 1321,1332 ****
jmethodID methodID,
...))
functionEnter(thr);
va_list args;
IN_VM(
! jniCheck::validate_jmethod_id(thr, methodID);
! jniCheck::validate_class(thr, cls, false);
)
va_start(args,methodID);
UNCHECKED()->CallStaticVoidMethodV(env,cls,methodID,args);
va_end(args);
thr->set_pending_jni_exception_check("CallStaticVoidMethod");
--- 1315,1325 ----
jmethodID methodID,
...))
functionEnter(thr);
va_list args;
IN_VM(
! jniCheck::validate_call_class(thr, cls, methodID);
)
va_start(args,methodID);
UNCHECKED()->CallStaticVoidMethodV(env,cls,methodID,args);
va_end(args);
thr->set_pending_jni_exception_check("CallStaticVoidMethod");
*** 1338,1349 ****
jclass cls,
jmethodID methodID,
va_list args))
functionEnter(thr);
IN_VM(
! jniCheck::validate_jmethod_id(thr, methodID);
! jniCheck::validate_class(thr, cls, false);
)
UNCHECKED()->CallStaticVoidMethodV(env,cls,methodID,args);
thr->set_pending_jni_exception_check("CallStaticVoidMethodV");
functionExit(thr);
JNI_END
--- 1331,1341 ----
jclass cls,
jmethodID methodID,
va_list args))
functionEnter(thr);
IN_VM(
! jniCheck::validate_call_class(thr, cls, methodID);
)
UNCHECKED()->CallStaticVoidMethodV(env,cls,methodID,args);
thr->set_pending_jni_exception_check("CallStaticVoidMethodV");
functionExit(thr);
JNI_END
*** 1353,1364 ****
jclass cls,
jmethodID methodID,
const jvalue * args))
functionEnter(thr);
IN_VM(
! jniCheck::validate_jmethod_id(thr, methodID);
! jniCheck::validate_class(thr, cls, false);
)
UNCHECKED()->CallStaticVoidMethodA(env,cls,methodID,args);
thr->set_pending_jni_exception_check("CallStaticVoidMethodA");
functionExit(thr);
JNI_END
--- 1345,1355 ----
jclass cls,
jmethodID methodID,
const jvalue * args))
functionEnter(thr);
IN_VM(
! jniCheck::validate_call_class(thr, cls, methodID);
)
UNCHECKED()->CallStaticVoidMethodA(env,cls,methodID,args);
thr->set_pending_jni_exception_check("CallStaticVoidMethodA");
functionExit(thr);
JNI_END
< prev index next >