mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8058575: IllegalAccessError trying to access package-private class from VM anonymous class
Put anonymous classes in unnamed package into host class's package. Throw exception if host class's package differs from anonymous class. Reviewed-by: coleenp, acorn
This commit is contained in:
parent
c271d83599
commit
e8e6415b7a
14 changed files with 416 additions and 31 deletions
|
@ -619,8 +619,8 @@ class InstanceKlass: public Klass {
|
|||
objArrayOop signers() const;
|
||||
|
||||
// host class
|
||||
Klass* host_klass() const {
|
||||
Klass** hk = (Klass**)adr_host_klass();
|
||||
InstanceKlass* host_klass() const {
|
||||
InstanceKlass** hk = adr_host_klass();
|
||||
if (hk == NULL) {
|
||||
return NULL;
|
||||
} else {
|
||||
|
@ -628,9 +628,9 @@ class InstanceKlass: public Klass {
|
|||
return *hk;
|
||||
}
|
||||
}
|
||||
void set_host_klass(const Klass* host) {
|
||||
void set_host_klass(const InstanceKlass* host) {
|
||||
assert(is_anonymous(), "not anonymous");
|
||||
const Klass** addr = (const Klass**)adr_host_klass();
|
||||
const InstanceKlass** addr = (const InstanceKlass **)adr_host_klass();
|
||||
assert(addr != NULL, "no reversed space");
|
||||
if (addr != NULL) {
|
||||
*addr = host;
|
||||
|
@ -1057,13 +1057,13 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
Klass** adr_host_klass() const {
|
||||
InstanceKlass** adr_host_klass() const {
|
||||
if (is_anonymous()) {
|
||||
Klass** adr_impl = adr_implementor();
|
||||
InstanceKlass** adr_impl = (InstanceKlass **)adr_implementor();
|
||||
if (adr_impl != NULL) {
|
||||
return adr_impl + 1;
|
||||
} else {
|
||||
return end_of_nonstatic_oop_maps();
|
||||
return (InstanceKlass **)end_of_nonstatic_oop_maps();
|
||||
}
|
||||
} else {
|
||||
return NULL;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue