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