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:18:35 UTC 2016


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


More information about the serviceability-dev mailing list