692 if (!host_class->is_interface() && host_class->is_subclass_of(field_class)) {
693 if (access.is_static() || // static fields are ok, see 6622385
694 current_class == resolved_class ||
695 field_class == resolved_class ||
696 host_class->is_subclass_of(resolved_class) ||
697 resolved_class->is_subclass_of(host_class)) {
698 return true;
699 }
700 }
701 }
702 }
703
704 // package access
705 if (!access.is_private() && is_same_class_package(current_class, field_class)) {
706 return true;
707 }
708
709 // private access between different classes needs a nestmate check, but
710 // not for anonymous classes - so check host_class
711 if (access.is_private() && host_class == current_class) {
712 if (current_class->is_instance_klass() && field_class->is_instance_klass() ) {
713 InstanceKlass* cur_ik = const_cast<InstanceKlass*>(InstanceKlass::cast(current_class));
714 InstanceKlass* field_ik = const_cast<InstanceKlass*>(InstanceKlass::cast(field_class));
715 if (cur_ik->has_nestmate_access_to(field_ik, Thread::current())) {
716 guarantee(resolved_class->is_subclass_of(field_class), "must be!");
717 return true;
718 }
719 }
720 }
721
722 // Allow all accesses from jdk/internal/reflect/MagicAccessorImpl subclasses to
723 // succeed trivially.
724 if (current_class->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) {
725 return true;
726 }
727
728 // Check for special relaxations
729 return can_relax_access_check_for(current_class, field_class, classloader_only);
730 }
731
732 bool Reflection::is_same_class_package(const Klass* class1, const Klass* class2) {
733 return InstanceKlass::cast(class1)->is_same_class_package(class2);
734 }
735
|
692 if (!host_class->is_interface() && host_class->is_subclass_of(field_class)) {
693 if (access.is_static() || // static fields are ok, see 6622385
694 current_class == resolved_class ||
695 field_class == resolved_class ||
696 host_class->is_subclass_of(resolved_class) ||
697 resolved_class->is_subclass_of(host_class)) {
698 return true;
699 }
700 }
701 }
702 }
703
704 // package access
705 if (!access.is_private() && is_same_class_package(current_class, field_class)) {
706 return true;
707 }
708
709 // private access between different classes needs a nestmate check, but
710 // not for anonymous classes - so check host_class
711 if (access.is_private() && host_class == current_class) {
712 // FIXME: can we actually get here with non-instance classes?
713 if (current_class->is_instance_klass() && field_class->is_instance_klass() ) {
714 InstanceKlass* cur_ik = const_cast<InstanceKlass*>(InstanceKlass::cast(current_class));
715 InstanceKlass* field_ik = const_cast<InstanceKlass*>(InstanceKlass::cast(field_class));
716 // Nestmate access checks may require resolution and validation of the nest-host
717 Thread* THREAD = Thread::current();
718 bool access = cur_ik->has_nestmate_access_to(field_ik, THREAD);
719 if (HAS_PENDING_EXCEPTION) {
720 return false;
721 }
722 if (access) {
723 guarantee(resolved_class->is_subclass_of(field_class), "must be!");
724 return true;
725 }
726 }
727 }
728
729 // Allow all accesses from jdk/internal/reflect/MagicAccessorImpl subclasses to
730 // succeed trivially.
731 if (current_class->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) {
732 return true;
733 }
734
735 // Check for special relaxations
736 return can_relax_access_check_for(current_class, field_class, classloader_only);
737 }
738
739 bool Reflection::is_same_class_package(const Klass* class1, const Klass* class2) {
740 return InstanceKlass::cast(class1)->is_same_class_package(class2);
741 }
742
|