src/share/classes/sun/invoke/util/VerifyAccess.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
jdk Cdiff src/share/classes/sun/invoke/util/VerifyAccess.java
src/share/classes/sun/invoke/util/VerifyAccess.java
Print this page
rev 9083 : [mq]: 8033278.checkMemberAccess
*** 88,124 ****
Class<?> lookupClass,
int allowedModes) {
if (allowedModes == 0) return false;
assert((allowedModes & PUBLIC) != 0 &&
(allowedModes & ~(ALL_ACCESS_MODES|PACKAGE_ALLOWED)) == 0);
! // Usually refc and defc are the same, but if they differ, verify them both.
! if (refc != defc) {
if (!isClassAccessible(refc, lookupClass, allowedModes)) {
- // Note that defc is verified in the switch below.
return false;
}
! if ((mods & (ALL_ACCESS_MODES|STATIC)) == (PROTECTED|STATIC) &&
! (allowedModes & PROTECTED_OR_PACKAGE_ALLOWED) != 0) {
! // Apply the special rules for refc here.
! if (!isRelatedClass(refc, lookupClass))
! return isSamePackage(defc, lookupClass);
! // If refc == defc, the call to isPublicSuperClass will do
! // the whole job, since in that case refc (as defc) will be
! // a superclass of the lookup class.
! }
! }
if (defc == lookupClass &&
(allowedModes & PRIVATE) != 0)
return true; // easy check; all self-access is OK
switch (mods & ALL_ACCESS_MODES) {
case PUBLIC:
! if (refc != defc) return true; // already checked above
! return isClassAccessible(refc, lookupClass, allowedModes);
case PROTECTED:
if ((allowedModes & PROTECTED_OR_PACKAGE_ALLOWED) != 0 &&
isSamePackage(defc, lookupClass))
return true;
if ((allowedModes & PROTECTED) != 0 &&
isSuperClass(defc, lookupClass))
return true;
return false;
case PACKAGE_ONLY: // That is, zero. Unmarked member is package-only access.
--- 88,117 ----
Class<?> lookupClass,
int allowedModes) {
if (allowedModes == 0) return false;
assert((allowedModes & PUBLIC) != 0 &&
(allowedModes & ~(ALL_ACCESS_MODES|PACKAGE_ALLOWED)) == 0);
! // The symbolic reference class (refc) must always be fully verified.
if (!isClassAccessible(refc, lookupClass, allowedModes)) {
return false;
}
! // Usually refc and defc are the same, but verify defc also in case they differ.
if (defc == lookupClass &&
(allowedModes & PRIVATE) != 0)
return true; // easy check; all self-access is OK
switch (mods & ALL_ACCESS_MODES) {
case PUBLIC:
! return true; // already checked above
case PROTECTED:
if ((allowedModes & PROTECTED_OR_PACKAGE_ALLOWED) != 0 &&
isSamePackage(defc, lookupClass))
return true;
+ if ((allowedModes & PROTECTED) == 0)
+ return false;
+ if ((mods & STATIC) != 0 &&
+ !isRelatedClass(refc, lookupClass))
+ return false;
if ((allowedModes & PROTECTED) != 0 &&
isSuperClass(defc, lookupClass))
return true;
return false;
case PACKAGE_ONLY: // That is, zero. Unmarked member is package-only access.
src/share/classes/sun/invoke/util/VerifyAccess.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File