src/share/classes/sun/invoke/util/VerifyAccess.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/classes/sun/invoke/util/VerifyAccess.java	Fri Jan 31 03:42:44 2014
--- new/src/share/classes/sun/invoke/util/VerifyAccess.java	Fri Jan 31 03:42:44 2014

*** 88,124 **** --- 88,117 ---- 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) { ! // The symbolic reference class (refc) must always be fully verified. 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. } } + // 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: - 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) + 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