RFR (S) 8057936: java.net.URLClassLoader.findClass uses exceptions in control flow

Michael McMahon michael.x.mcmahon at oracle.com
Wed Sep 10 11:21:53 UTC 2014


or how about just returning a null Class<?> from the privileged block
instead of the new result type only in the case where 
URLClassPath.getResource() returns null?
That's the main "normal" case where the resource doesn't exist, I think.

If defineClass() throws an IOException, then that is more likely to be a 
"genuine" exception

- Michael

diff --git a/src/java.base/share/classes/java/net/URLClassLoader.java 
b/src/java.base/share/classes/java/net/URLClassLoader.java
--- a/src/java.base/share/classes/java/net/URLClassLoader.java
+++ b/src/java.base/share/classes/java/net/URLClassLoader.java
@@ -356,8 +356,9 @@
      protected Class<?> findClass(final String name)
           throws ClassNotFoundException
      {
+    final Class<?> result;
          try {
-            return AccessController.doPrivileged(
+            result = AccessController.doPrivileged(
                  new PrivilegedExceptionAction<Class<?>>() {
                      public Class<?> run() throws ClassNotFoundException {
                          String path = name.replace('.', 
'/').concat(".class");
@@ -369,13 +370,17 @@
                                  throw new ClassNotFoundException(name, e);
                              }
                          } else {
-                            throw new ClassNotFoundException(name);
+                return null;
                          }
                      }
                  }, acc);
          } catch (java.security.PrivilegedActionException pae) {
              throw (ClassNotFoundException) pae.getException();
          }
+    if (result == null) {
+        throw new ClassNotFoundException(name);
+    }
+    return result;
      }

      /*

On 10/09/14 11:55, Ivan Gerasimov wrote:
>
> If a lambda were used instead of an anonymous class, it would save us 
> one line of code :-)
>
> Sincerely yours,
> Ivan
>
> On 10.09.2014 14:11, Claes Redestad wrote:
>> Hi,
>>
>> please review this simple patch to avoid raising 
>> PrivilegedActionExceptions
>> when failing to find a class in URLClassLoader.
>>
>>  bug: https://bugs.openjdk.java.net/browse/JDK-8057936
>>  webrev: http://cr.openjdk.java.net/~redestad/8057936/webrev.2/
>> /Claes
>>
>>
>




More information about the core-libs-dev mailing list