RFR (XS): 8156147 NPE in InstrumentationImpl.transform when loading classes from -Xbootclasspath/a

serguei.spitsyn at oracle.com serguei.spitsyn at oracle.com
Fri May 6 07:29:10 UTC 2016


On 5/6/16 00:23, Alan Bateman wrote:
>
> 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.

Ok, I'll check if some of the jdk_instrument tests can be modified to 
add this coverage.


>
> 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.

Sure, I'll rebase the fix to the jdk9/dev.


Thanks,
Serguei


>
> -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/7ac248e2/attachment-0001.html>


More information about the serviceability-dev mailing list