RFR (XS): 8156147 NPE in InstrumentationImpl.transform when loading classes from -Xbootclasspath/a
Alan Bateman
Alan.Bateman at oracle.com
Fri May 6 07:23:44 UTC 2016
This looks okay to me except I don't see a test. I think we will need
test coverage for instrumenting classes in the unnamed module of the
boot loader.
Also can you push this to jdk9/dev? We have a number of people on
jigsaw-dev reporting this issue and would be good to get it fixed in
jdk-9+118.
-Alan
On 06/05/2016 08:18, serguei.spitsyn at oracle.com wrote:
> Please, review a simple fix in the
> java.lang.instrument.InstrumentationImpl transform() method.
>
> This is the patch:
>
> diff -r d2f46fdfc3ca src/java.base/share/classes/module-info.java
> --- a/src/java.base/share/classes/module-info.java Thu May 05
> 11:44:01 2016 -0700
> +++ b/src/java.base/share/classes/module-info.java Fri May 06
> 00:11:23 2016 -0700
> @@ -145,6 +145,8 @@
> jdk.scripting.nashorn;
> exports jdk.internal.org.objectweb.asm.signature to
> jdk.scripting.nashorn;
> + exports jdk.internal.loader to
> + java.instrument;
> exports jdk.internal.math to
> java.desktop;
> exports jdk.internal.module to
>
>
> diff -r d2f46fdfc3ca
> src/java.instrument/share/classes/sun/instrument/InstrumentationImpl.java
> ---
> a/src/java.instrument/share/classes/sun/instrument/InstrumentationImpl.java
> Thu May 05 11:44:01 2016 -0700
> +++
> b/src/java.instrument/share/classes/sun/instrument/InstrumentationImpl.java
> Fri May 06 00:11:23 2016 -0700
> @@ -41,6 +41,8 @@
> import java.util.Objects;
> import java.util.jar.JarFile;
>
> +import jdk.internal.loader.BootLoader;
> +
> /*
> * Copyright 2003 Wily Technology, Inc.
> */
> @@ -436,7 +438,8 @@
> if (classBeingRedefined != null) {
> module = classBeingRedefined.getModule();
> } else {
> - module = loader.getUnnamedModule();
> + module = (loader == null) ?
> jdk.internal.loader.BootLoader.getUnnamedModule()
> + : loader.getUnnamedModule();
> }
> }
> if (mgr == null) {
>
>
> Summary:
>
> InstrumentationImpl.transform has this:
> if (module == null) {
> if (classBeingRedefined != null) {
> module = classBeingRedefined.getModule();
> } else {
> module = loader.getUnnamedModule();
> }
> }
>
> but if loader is null (-Xbootclasspath/a case) then this throws
> NullPointerException.
> If loader is null then we need to use
> jdk.internal.loader.BootLoader.getUnnamedModule().
>
>
> Testing:
> In progress: run the JTreg :jdk_instrument tests.
>
>
> Thanks,
> Serguei
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20160506/bb23ac9c/attachment.html>
More information about the serviceability-dev
mailing list