Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8307890

Throw NPE when invoke `new URLClassLoader(new URL[64])` in JDK11&17

    XMLWordPrintable

Details

    • generic
    • generic

    Description

      ADDITIONAL SYSTEM INFORMATION :
      OS: Windows 11

      java 8:
      java version "1.8.0_371"
      Java(TM) SE Runtime Environment (build 1.8.0_371-b11)
      Java HotSpot(TM) 64-Bit Server VM (build 25.371-b11, mixed mode)

      java 11:
      java version "11.0.19" 2023-04-18 LTS
      Java(TM) SE Runtime Environment 18.9 (build 11.0.19+9-LTS-224)
      Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.19+9-LTS-224, mixed mode)

      java 17:
      java version "17.0.7" 2023-04-18 LTS
      Java(TM) SE Runtime Environment (build 17.0.7+8-LTS-224)
      Java HotSpot(TM) 64-Bit Server VM (build 17.0.7+8-LTS-224, mixed mode, sharing)


      A DESCRIPTION OF THE PROBLEM :
      When the constructor of URLClassLoader is called, if the parameter is a new URL array, JDK11 and JDK17 will throw a NPE, but JDK8 will not.
      Should JDK11 and JDK17 be compatible with the behavior of JDK8?

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Step1. Create test case

      import java.net.URL;
      import java.net.URLClassLoader;

      public class Case {

          public static void main(String[] args) {
              new URLClassLoader(new URL[64]);
          }
      }

      Step2 compile and run the Case with JDK8u371 & JDK11.0.19 & JDK17.0.7

      > D:\jdk\jdk8u371\bin\java Case
      <nothing>

      > D:\jdk\jdk-11.0.19\bin\java Case
       Exception in thread "main" java.lang.NullPointerException
              at java.base/java.util.ArrayDeque.addLast(ArrayDeque.java:304)
              at java.base/java.util.ArrayDeque.add(ArrayDeque.java:495)
              at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:155)
              at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:172)
              at java.base/java.net.URLClassLoader.<init>(URLClassLoader.java:165)
              at Case.main(Case.java:7)

      > D:\jdk\jdk-17.0.7\bin\java Case
      Exception in thread "main" java.lang.NullPointerException
              at java.base/java.util.ArrayDeque.addLast(ArrayDeque.java:303)
              at java.base/java.util.ArrayDeque.add(ArrayDeque.java:494)
              at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:159)
              at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:176)
              at java.base/java.net.URLClassLoader.<init>(URLClassLoader.java:152)
              at Case.main(Case.java:7)


      ACTUAL -
      Exception in thread "main" java.lang.NullPointerException
              at java.base/java.util.ArrayDeque.addLast(ArrayDeque.java:303)
              at java.base/java.util.ArrayDeque.add(ArrayDeque.java:494)
              at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:159)
              at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:176)
              at java.base/java.net.URLClassLoader.<init>(URLClassLoader.java:152)
              at Case.main(Case.java:7)


      ---------- BEGIN SOURCE ----------
      import java.net.URL;
      import java.net.URLClassLoader;

      public class Case {

          public static void main(String[] args) {
              new URLClassLoader(new URL[64]);
          }
      }
      ---------- END SOURCE ----------

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              webbuggrp Webbug Group
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: