JDK-8026517 : URLClassLoader constructors and newInstance() should throw NPE if URL array has a null element
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.net
  • Affected Version: 8
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • Submitted: 2013-10-15
  • Updated: 2018-03-01
  • Resolved: 2018-03-01
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
tbd_minorResolved
Related Reports
Duplicate :  
Relates :  
Relates :  
Relates :  
Description
Currently a URLClassLoader instance will be successfully constructed if the URL array contains a null element but a NullPointerException will subsequently occur, e.g., in findClass() if the URLClassLoader is actually used.
Comments
This issue was fixed as a side-effect of the change in JDK-8198484. Though the specs for the methods still need to be updated - see JDK-8198803.
01-03-2018

This issue is NOT a duplicate of JDK-7179567. JDK-7179567 and the related JDK-6445180 dealt with a null URL array, not with null elements within that array! There are test cases in the test pushed by JDK-6445180 that are commented out until this bug is fixed.
01-03-2018

I cannot check this with JCK8 b36 in packet mode due to JCK-7301913 that fixed in b37 only. I checked this manually as it described in Chris's comments (comment - 2013-12-02 17:57) I used same command for b35 and b36 but different test location and different classpath. resuts below: JCK8 b35: jdk1.8.0/bin/java -cp /export/local/aurora/CommonData/jck_runtime_8/classes/ javasoft.sqe.tests.api.java.net.URLClassLoader.Ctor3Tests -TestCaseID ALL -TestURL file:////export/local/aurora/CommonData/jck_runtime_8/tests/api/java_net/URLClassLoader/index.html#Ctor3 Ctor3T101: Passed. OKAY java.lang.NullPointerException at sun.misc.URLClassPath.<init>(URLClassPath.java:107) at java.net.URLClassLoader.<init>(URLClassLoader.java:194) at javasoft.sqe.tests.api.java.net.URLClassLoader.TestURLClassLoader.<init>(TestURLClassLoader.java:35) at javasoft.sqe.tests.api.java.net.URLClassLoader.Ctor3Tests.Ctor3T100(Ctor3Tests.java:42) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at javasoft.sqe.javatest.lib.MultiTest.invokeTestCase(MultiTest.java:405) at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:194) at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:126) at javasoft.sqe.tests.api.java.net.URLClassLoader.Ctor3Tests.main(Ctor3Tests.java:27) Ctor3T100: Failed. Test case throws exception: java.lang.NullPointerException Ctor3T102: Passed. OKAY java.lang.NullPointerException at sun.misc.URLClassPath.<init>(URLClassPath.java:107) at java.net.URLClassLoader.<init>(URLClassLoader.java:194) at javasoft.sqe.tests.api.java.net.URLClassLoader.TestURLClassLoader.<init>(TestURLClassLoader.java:35) at javasoft.sqe.tests.api.java.net.URLClassLoader.Ctor3Tests.Ctor3T103(Ctor3Tests.java:101) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at javasoft.sqe.javatest.lib.MultiTest.invokeTestCase(MultiTest.java:405) at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:194) at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:126) at javasoft.sqe.tests.api.java.net.URLClassLoader.Ctor3Tests.main(Ctor3Tests.java:27) Ctor3T103: Failed. Test case throws exception: java.lang.NullPointerException STATUS:Failed.test cases: 4; passed: 2; failed: 2; first test case failure: Ctor3T100 $ $ jdk1.8.0/bin/java -cp /export/local/aurora/CommonData/jck_runtime_8/classes/ javasoft.sqe.tests.api.java.net.URLClassLoader.findClassTests -TestCaseID ALL -TestURL file:////export/local/aurora/CommonData/jck_runtime_8/tests/api/java_net/URLClassLoader/index.html#findClass findClassT100: Passed. ClassNotFoundException throwed as expected findClassT101: Passed. OKAY findClassT102: Passed. OKAY findClassT103: Passed. OKAY findClassT104: Passed. OKAY findClassT105: Passed. OKAY findClassT106: Passed. Class loaded successfully findClassT107: Passed. OKAY java.lang.NullPointerException at java.net.URLClassLoader$1.run(URLClassLoader.java:363) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at javasoft.sqe.tests.api.java.net.URLClassLoader.TestURLClassLoader.findClassCall(TestURLClassLoader.java:43) at javasoft.sqe.tests.api.java.net.URLClassLoader.findClassTests.findClassT108(findClassTests.java:338) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at javasoft.sqe.javatest.lib.MultiTest.invokeTestCase(MultiTest.java:405) at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:194) at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:126) at javasoft.sqe.tests.api.java.net.URLClassLoader.findClassTests.main(findClassTests.java:73) findClassT108: Failed. Test case throws exception: java.lang.NullPointerException STATUS:Failed.test cases: 9; passed: 8; failed: 1; first test case failure: findClassT108 $ $ jdk1.8.0/bin/java -cp /export/local/aurora/CommonData/jck_runtime_8/classes/ javasoft.sqe.tests.api.java.net.URLClassLoader.getPermissionsTests -TestCaseID ALL -TestURL file:////export/local/aurora/CommonData/jck_runtime_8/tests/api/java_net/URLClassLoader/index.html#getPermissions getPermissionsT100: Passed. OKAY getPermissionsT101: Passed. OKAY getPermissionsT102: Passed. OKAY getPermissionsT103: Passed. OKAY java.lang.NullPointerException at java.net.URLClassLoader.getPermissions(URLClassLoader.java:644) at javasoft.sqe.tests.api.java.net.URLClassLoader.TestURLClassLoader.getPermissionsCall(TestURLClassLoader.java:47) at javasoft.sqe.tests.api.java.net.URLClassLoader.getPermissionsTests.getPermissionsT104(getPermissionsTests.java:212) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at javasoft.sqe.javatest.lib.MultiTest.invokeTestCase(MultiTest.java:405) at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:194) at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:126) at javasoft.sqe.tests.api.java.net.URLClassLoader.getPermissionsTests.main(getPermissionsTests.java:114) getPermissionsT104: Failed. Test case throws exception: java.lang.NullPointerException STATUS:Failed.test cases: 5; passed: 4; failed: 1; first test case failure: getPermissionsT104 JCK8b36: jdk1.8.0/bin/java -cp /export/local/sk/JCK-runtime-8/classes/ javasoft.sqe.tests.api.java.net.URLClassLoader.Ctor3Tests -TestCaseID ALL -TestURL file:////export/local/sk/JCK-runtime-8/tests/api/java_net/URLClassLoader/index.html#Ctor3 Ctor3T100: Passed. OKAY Ctor3T101: Passed. OKAY Ctor3T102: Passed. OKAY Ctor3T103: Passed. OKAY STATUS:Passed.test cases: 4; all passed $ jdk1.8.0/bin/java -cp /export/local/sk/JCK-runtime-8/classes/ javasoft.sqe.tests.api.java.net.URLClassLoader.findClassTests -TestCaseID ALL -TestURL file:////export/local/sk/JCK-runtime-8/tests/api/java_net/URLClassLoader/index.html#findClass findClassT106: Passed. Class loaded successfully findClassT103: Passed. OKAY findClassT104: Passed. OKAY findClassT105: Passed. OKAY findClassT100: Passed. ClassNotFoundException throwed as expected findClassT101: Passed. OKAY findClassT102: Passed. OKAY findClassT107: Passed. OKAY findClassT108: Passed. OKAY STATUS:Passed.test cases: 9; all passed $ jdk1.8.0/bin/java -cp /export/local/sk/JCK-runtime-8/classes/ javasoft.sqe.tests.api.java.net.URLClassLoader.getPermissionsTests -TestCaseID ALL -TestURL file:////export/local/sk/JCK-runtime-8/tests/api/java_net/URLClassLoader/index.html#getPermissions getPermissionsT102: Passed. OKAY getPermissionsT103: Passed. OKAY getPermissionsT101: Passed. OKAY getPermissionsT100: Passed. OKAY getPermissionsT104: Passed. OKAY STATUS:Passed.test cases: 5; all passed jdk1.8.0/bin/java -version java version "1.8.0-ea" Java(TM) SE Embedded Runtime Environment (build 1.8.0-ea-b118) Java HotSpot(TM) Embedded Server VM (build 25.0-b60, mixed mode) Summary: issue could be closed with appropriate fix version.
02-12-2013

Sergei: We both appear to be using jdk8_b118, so there is either something environmental, or a difference in the JCK's we are running. I am running the tests from JCK b36.
02-12-2013

Verified with http://jre.us.oracle.com/java/re/jdk/8/promoted/ea/b118/embedded/bundles/jdk-8-ea-b118-linux-i586-27_nov_2013.tar.gz Used host: emb-spb-atom-d2700-7.ru.oracle.com Test result: /export/local/sk/jdk1.8.0//bin/java -server -Dcom.sun.CORBA.transport.ORBTCPReadTimeouts=100:27000:3600:5 -Djava.ext.dirs=/export/local/aurora/CommonData/jck_runtime_8//lib/extensions:/export/local/sk/jdk1.8.0//jre/lib/ext -verify -classpath /export/local/aurora/CommonData/jck_runtime_8/classes -Djava.security.policy=/export/local/aurora/CommonData/jck_runtime_8/lib/jck.policy javasoft.sqe.tests.api.java.net.URLClassLoader.Ctor3Tests -TestCaseID ALL -TestURL file:/export/local/aurora/CommonData/jck_runtime_8/tests/api/java_net/URLClassLoader/index.html#Ctor3 java.lang.NullPointerException at sun.misc.URLClassPath.<init>(URLClassPath.java:107) at java.net.URLClassLoader.<init>(URLClassLoader.java:194) at javasoft.sqe.tests.api.java.net.URLClassLoader.TestURLClassLoader.<init>(TestURLClassLoader.java:35) at javasoft.sqe.tests.api.java.net.URLClassLoader.Ctor3Tests.Ctor3T100(Ctor3Tests.java:42) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at javasoft.sqe.javatest.lib.MultiTest.invokeTestCase(MultiTest.java:405) at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:194) at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:126) at javasoft.sqe.tests.api.java.net.URLClassLoader.Ctor3Tests.main(Ctor3Tests.java:27) Ctor3T100: Failed. Test case throws exception: java.lang.NullPointerException Ctor3T101: Passed. OKAY Ctor3T102: Passed. OKAY java.lang.NullPointerException at sun.misc.URLClassPath.<init>(URLClassPath.java:107) at java.net.URLClassLoader.<init>(URLClassLoader.java:194) at javasoft.sqe.tests.api.java.net.URLClassLoader.TestURLClassLoader.<init>(TestURLClassLoader.java:35) at javasoft.sqe.tests.api.java.net.URLClassLoader.Ctor3Tests.Ctor3T103(Ctor3Tests.java:101) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at javasoft.sqe.javatest.lib.MultiTest.invokeTestCase(MultiTest.java:405) at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:194) at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:126) at javasoft.sqe.tests.api.java.net.URLClassLoader.Ctor3Tests.main(Ctor3Tests.java:27) Ctor3T103: Failed. Test case throws exception: java.lang.NullPointerException STATUS:Failed.test cases: 4; passed: 2; failed: 2; first test case failure: Ctor3T100
02-12-2013

Based on the test results above I see no issue. Can the submitter please confirm if there is still any issue.
02-12-2013

With the latest JDK and latest JCK I do not see these failures. [jlabs.SFBay.Sun.COM]shimmer : ~/runJCK.sh + /java/re/jdk/8/latest/binaries/solaris-sparcv9/bin/java -version java version "1.8.0-ea" Java(TM) SE Runtime Environment (build 1.8.0-ea-b118) Java HotSpot(TM) 64-Bit Server VM (build 25.0-b60, mixed mode) + /java/re/jdk/8/latest/binaries/solaris-sparcv9/bin/java -cp /tmp/chris:/net/jre.us.oracle.com/p/v16/jck/8/ea/b36/binaries/JCK-runtime-8/classes javasoft.sqe.tests.api.java.net.URLClassLoader.Ctor3Tests -TestCaseID ALL -TestURL file:////net/jre.us.oracle.com/p/v16/jck/8/ea/b36/binaries/JCK-runtime-8/tests/api/java_net/URLClassLoader/index.html#Ctor3 Ctor3T101: Passed. OKAY Ctor3T103: Passed. OKAY Ctor3T102: Passed. OKAY Ctor3T100: Passed. OKAY STATUS:Passed.test cases: 4; all passed + /java/re/jdk/8/latest/binaries/solaris-sparcv9/bin/java -cp /tmp/chris:/net/jre.us.oracle.com/p/v16/jck/8/ea/b36/binaries/JCK-runtime-8/classes javasoft.sqe.tests.api.java.net.URLClassLoader.findClassTests -TestCaseID ALL -TestURL file:////net/jre.us.oracle.com/p/v16/jck/8/ea/b36/binaries/JCK-runtime-8/tests/api/java_net/URLClassLoader/index.html#findClass findClassT100: Passed. ClassNotFoundException throwed as expected findClassT101: Passed. OKAY findClassT102: Passed. OKAY findClassT103: Passed. OKAY findClassT104: Passed. OKAY findClassT105: Passed. OKAY findClassT106: Passed. Class loaded successfully findClassT107: Passed. OKAY findClassT108: Passed. OKAY STATUS:Passed.test cases: 9; all passed + /java/re/jdk/8/latest/binaries/solaris-sparcv9/bin/java -cp /tmp/chris:/net/jre.us.oracle.com/p/v16/jck/8/ea/b36/binaries/JCK-runtime-8/classes javasoft.sqe.tests.api.java.net.URLClassLoader.getPermissionsTests -network.ftpSupported true -TestCaseID ALL -TestURL file:////net/jre.us.oracle.com/p/v16/jck/8/ea/b36/binaries/JCK-runtime-8/tests/api/java_net/URLClassLoader/index.html#getPermissions getPermissionsT101: Passed. OKAY getPermissionsT100: Passed. OKAY getPermissionsT102: Passed. OKAY getPermissionsT103: Passed. OKAY getPermissionsT104: Passed. OKAY STATUS:Passed.test cases: 5; all passed
02-12-2013

Affected testcases: api/java_net/URLClassLoader/index_Ctor3 api/java_net/URLClassLoader/index_findClass api/java_net/URLClassLoader/index_getPermissions Found on JDK8 b115 + JCK8 b35
14-11-2013