RFR: JDK-8281000 ClassLoader::registerAsParallelCapable throws NPE if caller is null [v2]
Mandy Chung
mchung at openjdk.java.net
Tue Feb 15 23:23:11 UTC 2022
On Tue, 15 Feb 2022 22:17:53 GMT, Tim Prinzing <duke at openjdk.java.net> wrote:
>> JDK-8281000 ClassLoader::registerAsParallelCapable throws NPE if caller is null
>
> Tim Prinzing has updated the pull request incrementally with one additional commit since the last revision:
>
> Changes from feedback.
>
> - Copyright dates fixed
> - IllegalCallerException thrown for no caller frame, and associated
> javadoc changes
> - test changed to look for IllegalCallerException thrown.
src/java.base/share/classes/java/lang/ClassLoader.java line 1612:
> 1610: * In cases where {@code ClassLoader.registerAsParallelCapable} is called from a context where
> 1611: * there is no caller frame on the stack (e.g. when called directly
> 1612: * from a JNI attached thread), {@code IllegalCallerException} is thrown.
Suggestion:
* In cases where this method is called from a context where the caller is not a subclass
* {@code ClassLoader} or there is no caller frame on the stack (e.g. when called directly
* from a JNI attached thread), {@code IllegalCallerException} is thrown.
Should mention the non-class loader caller as well.
src/java.base/share/classes/java/lang/ClassLoader.java line 1617:
> 1615: * @return {@code true} if the caller is successfully registered as
> 1616: * parallel capable and {@code false} if otherwise.
> 1617: * @throws IllegalCallerException if there is no caller frame on the stack.
Suggestion:
* @throws IllegalCallerException if the caller is not a subclass of {@code ClassLoader}
src/java.base/share/classes/java/lang/ClassLoader.java line 1626:
> 1624: protected static boolean registerAsParallelCapable() {
> 1625: final Class<?> caller = Reflection.getCallerClass();
> 1626: if (caller == null) {
Suggestion:
if (caller == null || !ClassLoader.class.isAssignableFrom(caller)) {
throw new IllegalCallerException(caller + " not a subclass of ClassLoader");
}
What we suggested is to throw IllegalCallerException if the caller is not a class loader and that will include null caller case.
test/jdk/java/lang/ClassLoader/exeNullCallerClassLoaderTest/NullCallerClassLoaderTest.java line 30:
> 28: * @summary Test uses custom launcher that starts VM using JNI that verifies
> 29: * ClassLoader.registerAsParallelCapable with null caller class does not throw a NullPointerException,
> 30: * and instead returns false.
`@summary` needs update to reflect the new change.
-------------
PR: https://git.openjdk.java.net/jdk/pull/7448
More information about the core-libs-dev
mailing list