< prev index next >

src/java.base/share/classes/sun/invoke/util/VerifyAccess.java

Print this page
@@ -103,11 +103,11 @@
          // The symbolic reference class (refc) must always be fully verified.
          if (!isClassAccessible(refc, lookupClass, prevLookupClass, allowedModes)) {
              return false;
          }
          // Usually refc and defc are the same, but verify defc also in case they differ.
-         if (defc == lookupClass  &&
+         if (defc.asPrimaryType() == lookupClass  &&
              (allowedModes & PRIVATE) != 0)
              return true;        // easy check; all self-access is OK with a private lookup
  
          switch (mods & ALL_ACCESS_MODES) {
          case PUBLIC:

@@ -138,19 +138,19 @@
              // Rules for privates follows access rules for nestmates.
              boolean canAccess = ((allowedModes & PRIVATE) != 0 &&
                                   Reflection.areNestMates(defc, lookupClass));
              // for private methods the selected method equals the
              // resolved method - so refc == defc
-             assert (canAccess && refc == defc) || !canAccess;
+             assert (canAccess && refc.asPrimaryType() == defc.asPrimaryType()) || !canAccess;
              return canAccess;
          default:
              throw new IllegalArgumentException("bad modifiers: "+Modifier.toString(mods));
          }
      }
  
      static boolean isRelatedClass(Class<?> refc, Class<?> lookupClass) {
-         return (refc == lookupClass ||
+         return (refc.asPrimaryType() == lookupClass.asPrimaryType() ||
                  isSubClass(refc, lookupClass) ||
                  isSubClass(lookupClass, refc));
      }
  
      static boolean isSubClass(Class<?> lookupClass, Class<?> defc) {

@@ -271,11 +271,11 @@
       * reference of a given reference class, is really visible to that class.
       * @param type the supposed type of a member or symbolic reference of refc
       * @param refc the class attempting to make the reference
       */
      public static boolean isTypeVisible(Class<?> type, Class<?> refc) {
-         if (type == refc) {
+         if (type.asPrimaryType() == refc.asPrimaryType()) {
              return true;  // easy check
          }
          while (type.isArray())  type = type.getComponentType();
          if (type.isPrimitive() || type == Object.class) {
              return true;

@@ -319,10 +319,11 @@
          // type ("type") and then is discarded.  Thus, the worst that can happen to
          // the "child" class loader is that it is bothered to load and report a class
          // that differs from "type"; this happens once due to JVM system dictionary
          // memoization.  And the caller never gets to look at the alternate type binding
          // ("res"), whether it exists or not.
+ 
          final String name = type.getName();
          @SuppressWarnings("removal")
          Class<?> res = java.security.AccessController.doPrivileged(
                  new java.security.PrivilegedAction<>() {
                      public Class<?> run() {

@@ -331,11 +332,11 @@
                          } catch (ClassNotFoundException | LinkageError e) {
                              return null; // Assume the class is not found
                          }
                      }
              });
-         return (type == res);
+         return (type.asPrimaryType() == res);
      }
  
      /**
       * Decide if the given method type, attributed to a member or symbolic
       * reference of a given reference class, is really visible to that class.
< prev index next >