src/hotspot/share/prims/jniCheck.cpp
changeset 48831 05894c073b7e
parent 48808 2b0b7f222800
child 49192 6734eeef4283
equal deleted inserted replaced
48830:11920d5d14a8 48831:05894c073b7e
   286     ReportJNIFatalError(thr, fatal_should_be_nonstatic);
   286     ReportJNIFatalError(thr, fatal_should_be_nonstatic);
   287 
   287 
   288   /* validate the object being passed and then get its class */
   288   /* validate the object being passed and then get its class */
   289   ASSERT_OOPS_ALLOWED;
   289   ASSERT_OOPS_ALLOWED;
   290   oop oopObj = jniCheck::validate_object(thr, obj);
   290   oop oopObj = jniCheck::validate_object(thr, obj);
   291   if (!oopObj) {
   291   if (oopObj == NULL) {
   292     ReportJNIFatalError(thr, fatal_null_object);
   292     ReportJNIFatalError(thr, fatal_null_object);
   293   }
   293   }
   294   Klass* k_oop = oopObj->klass();
   294   Klass* k_oop = oopObj->klass();
   295 
   295 
   296   if (!jfieldIDWorkaround::is_valid_jfieldID(k_oop, fid)) {
   296   if (!jfieldIDWorkaround::is_valid_jfieldID(k_oop, fid)) {
   316 static inline void
   316 static inline void
   317 checkString(JavaThread* thr, jstring js)
   317 checkString(JavaThread* thr, jstring js)
   318 {
   318 {
   319   ASSERT_OOPS_ALLOWED;
   319   ASSERT_OOPS_ALLOWED;
   320   oop s = jniCheck::validate_object(thr, js);
   320   oop s = jniCheck::validate_object(thr, js);
   321   if (!s || !java_lang_String::is_instance(s))
   321   if ((s == NULL) || !java_lang_String::is_instance(s))
   322     ReportJNIFatalError(thr, fatal_non_string);
   322     ReportJNIFatalError(thr, fatal_non_string);
   323 }
   323 }
   324 
   324 
   325 static inline arrayOop
   325 static inline arrayOop
   326 check_is_array(JavaThread* thr, jarray jArray)
   326 check_is_array(JavaThread* thr, jarray jArray)
   459   return moop;
   459   return moop;
   460 }
   460 }
   461 
   461 
   462 
   462 
   463 oop jniCheck::validate_object(JavaThread* thr, jobject obj) {
   463 oop jniCheck::validate_object(JavaThread* thr, jobject obj) {
   464     if (!obj)
   464   if (obj == NULL) return NULL;
   465         return NULL;
   465   ASSERT_OOPS_ALLOWED;
   466     ASSERT_OOPS_ALLOWED;
   466   oop oopObj = jniCheck::validate_handle(thr, obj);
   467     oop oopObj = jniCheck::validate_handle(thr, obj);
   467   if (oopObj == NULL) {
   468     if (!oopObj) {
   468     ReportJNIFatalError(thr, fatal_bad_ref_to_jni);
   469       ReportJNIFatalError(thr, fatal_bad_ref_to_jni);
   469   }
   470     }
   470   return oopObj;
   471     return oopObj;
       
   472 }
   471 }
   473 
   472 
   474 // Warn if a class descriptor is in decorated form; class descriptors
   473 // Warn if a class descriptor is in decorated form; class descriptors
   475 // passed to JNI findClass should not be decorated unless they are
   474 // passed to JNI findClass should not be decorated unless they are
   476 // array descriptors.
   475 // array descriptors.
   490 }
   489 }
   491 
   490 
   492 Klass* jniCheck::validate_class(JavaThread* thr, jclass clazz, bool allow_primitive) {
   491 Klass* jniCheck::validate_class(JavaThread* thr, jclass clazz, bool allow_primitive) {
   493   ASSERT_OOPS_ALLOWED;
   492   ASSERT_OOPS_ALLOWED;
   494   oop mirror = jniCheck::validate_handle(thr, clazz);
   493   oop mirror = jniCheck::validate_handle(thr, clazz);
   495   if (!mirror) {
   494   if (mirror == NULL) {
   496     ReportJNIFatalError(thr, fatal_received_null_class);
   495     ReportJNIFatalError(thr, fatal_received_null_class);
   497   }
   496   }
   498 
   497 
   499   if (mirror->klass() != SystemDictionary::Class_klass()) {
   498   if (mirror->klass() != SystemDictionary::Class_klass()) {
   500     ReportJNIFatalError(thr, fatal_class_not_a_class);
   499     ReportJNIFatalError(thr, fatal_class_not_a_class);