< prev index next >

src/share/vm/runtime/reflection.cpp

Print this page




 429 
 430 static bool can_relax_access_check_for(const Klass* accessor,
 431                                        const Klass* accessee,
 432                                        bool classloader_only) {
 433 
 434   const InstanceKlass* accessor_ik = InstanceKlass::cast(accessor);
 435   const InstanceKlass* accessee_ik = InstanceKlass::cast(accessee);
 436 
 437   // If either is on the other's host_klass chain, access is OK,
 438   // because one is inside the other.
 439   if (under_host_klass(accessor_ik, accessee) ||
 440     under_host_klass(accessee_ik, accessor))
 441     return true;
 442 
 443   if ((RelaxAccessControlCheck &&
 444     accessor_ik->major_version() < Verifier::NO_RELAX_ACCESS_CTRL_CHECK_VERSION &&
 445     accessee_ik->major_version() < Verifier::NO_RELAX_ACCESS_CTRL_CHECK_VERSION) ||
 446     (accessor_ik->major_version() < Verifier::STRICTER_ACCESS_CTRL_CHECK_VERSION &&
 447     accessee_ik->major_version() < Verifier::STRICTER_ACCESS_CTRL_CHECK_VERSION)) {
 448     return classloader_only &&
 449       Verifier::relax_verify_for(accessor_ik->class_loader()) &&
 450       accessor_ik->protection_domain() == accessee_ik->protection_domain() &&
 451       accessor_ik->class_loader() == accessee_ik->class_loader();
 452   }
 453 
 454   return false;
 455 }
 456 
 457 /*
 458     Type Accessibility check for public types: Callee Type T is accessible to Caller Type S if:
 459 
 460                         Callee T in             Callee T in package PT,
 461                         unnamed module          runtime module MT
 462  ------------------------------------------------------------------------------------------------
 463 
 464  Caller S in package     If MS is loose: YES      If same classloader/package (PS == PT): YES
 465  PS, runtime module MS   If MS can read T's       If same runtime module: (MS == MT): YES
 466                          unnamed module: YES
 467                                                   Else if (MS can read MT (Establish readability) &&
 468                                                     MT exports PT to MS or to all modules): YES
 469 




 429 
 430 static bool can_relax_access_check_for(const Klass* accessor,
 431                                        const Klass* accessee,
 432                                        bool classloader_only) {
 433 
 434   const InstanceKlass* accessor_ik = InstanceKlass::cast(accessor);
 435   const InstanceKlass* accessee_ik = InstanceKlass::cast(accessee);
 436 
 437   // If either is on the other's host_klass chain, access is OK,
 438   // because one is inside the other.
 439   if (under_host_klass(accessor_ik, accessee) ||
 440     under_host_klass(accessee_ik, accessor))
 441     return true;
 442 
 443   if ((RelaxAccessControlCheck &&
 444     accessor_ik->major_version() < Verifier::NO_RELAX_ACCESS_CTRL_CHECK_VERSION &&
 445     accessee_ik->major_version() < Verifier::NO_RELAX_ACCESS_CTRL_CHECK_VERSION) ||
 446     (accessor_ik->major_version() < Verifier::STRICTER_ACCESS_CTRL_CHECK_VERSION &&
 447     accessee_ik->major_version() < Verifier::STRICTER_ACCESS_CTRL_CHECK_VERSION)) {
 448     return classloader_only &&
 449       Verifier::relax_access_for(accessor_ik->class_loader()) &&
 450       accessor_ik->protection_domain() == accessee_ik->protection_domain() &&
 451       accessor_ik->class_loader() == accessee_ik->class_loader();
 452   }
 453 
 454   return false;
 455 }
 456 
 457 /*
 458     Type Accessibility check for public types: Callee Type T is accessible to Caller Type S if:
 459 
 460                         Callee T in             Callee T in package PT,
 461                         unnamed module          runtime module MT
 462  ------------------------------------------------------------------------------------------------
 463 
 464  Caller S in package     If MS is loose: YES      If same classloader/package (PS == PT): YES
 465  PS, runtime module MS   If MS can read T's       If same runtime module: (MS == MT): YES
 466                          unnamed module: YES
 467                                                   Else if (MS can read MT (Establish readability) &&
 468                                                     MT exports PT to MS or to all modules): YES
 469 


< prev index next >