-
Bug
-
Resolution: Fixed
-
P3
-
10, 11, 12
-
b28
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8216526 | 13 | Jiangli Zhou | P3 | Resolved | Fixed | b04 |
JDK-8217075 | 12.0.1 | Jiangli Zhou | P3 | Resolved | Fixed | b03 |
JDK-8216980 | 11.0.3-oracle | Poonam Bajaj Parhar | P3 | Resolved | Fixed | b03 |
JDK-8219383 | 11.0.3 | Jiangli Zhou | P3 | Resolved | Fixed | master |
ClassLoaders.toFileURL is called only from hotspot, apparently from appcds.
It should only be called with a String that is an actual filename, but it gets called with the String "jrt:/java.compiler" which seems wrong. toFileURL canonicalizes the input String, causing undesired risky I/O.
Recipe:
Apply a patch to get toFileURL to throw:
--- a/src/java.base/share/classes/jdk/internal/loader/ClassLoaders.java
+++ b/src/java.base/share/classes/jdk/internal/loader/ClassLoaders.java
@@ -219,6 +219,7 @@
*/
@Deprecated
private static URL toFileURL(String s) {
+ if (s.contains(":")) throw new Error("toFileURL(" + s + ")");
try {
// Use an intermediate File object to construct a URI/URL without
// authority component as URLClassPath can't handle URLs with a UNC
and then
cd test/hotspot/jtreg
and run the :hotspot_appcds tests, resulting in 8 failures.
Here's one:
TEST: runtime/appcds/jigsaw/overridetests/OverrideTests.java
...
stdout: [];
stderr: [openjdk version "12-internal" 2019-03-19
OpenJDK Runtime Environment (build 12-internal+0-adhoc.martinrb.toFileURL)
OpenJDK 64-Bit Server VM (build 12-internal+0-adhoc.martinrb.toFileURL, mixed mode, sharing)
Exception in thread "main" java.lang.Error: toFileURL(jrt:/jdk.compiler)
at java.base/jdk.internal.loader.ClassLoaders.toFileURL(ClassLoaders.java:223)
at java.base/java.lang.ClassLoader.findLoadedClass0(Native Method)
at java.base/java.lang.ClassLoader.findLoadedClass(ClassLoader.java:1280)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:595)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:408)
at test/jdk.test.Main.main(Main.java:73)
]
exitValue = 1
It should only be called with a String that is an actual filename, but it gets called with the String "jrt:/java.compiler" which seems wrong. toFileURL canonicalizes the input String, causing undesired risky I/O.
Recipe:
Apply a patch to get toFileURL to throw:
--- a/src/java.base/share/classes/jdk/internal/loader/ClassLoaders.java
+++ b/src/java.base/share/classes/jdk/internal/loader/ClassLoaders.java
@@ -219,6 +219,7 @@
*/
@Deprecated
private static URL toFileURL(String s) {
+ if (s.contains(":")) throw new Error("toFileURL(" + s + ")");
try {
// Use an intermediate File object to construct a URI/URL without
// authority component as URLClassPath can't handle URLs with a UNC
and then
cd test/hotspot/jtreg
and run the :hotspot_appcds tests, resulting in 8 failures.
Here's one:
TEST: runtime/appcds/jigsaw/overridetests/OverrideTests.java
...
stdout: [];
stderr: [openjdk version "12-internal" 2019-03-19
OpenJDK Runtime Environment (build 12-internal+0-adhoc.martinrb.toFileURL)
OpenJDK 64-Bit Server VM (build 12-internal+0-adhoc.martinrb.toFileURL, mixed mode, sharing)
Exception in thread "main" java.lang.Error: toFileURL(jrt:/jdk.compiler)
at java.base/jdk.internal.loader.ClassLoaders.toFileURL(ClassLoaders.java:223)
at java.base/java.lang.ClassLoader.findLoadedClass0(Native Method)
at java.base/java.lang.ClassLoader.findLoadedClass(ClassLoader.java:1280)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:595)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:408)
at test/jdk.test.Main.main(Main.java:73)
]
exitValue = 1
- backported by
-
JDK-8216526 Incorrect call ClassLoaders.toFileURL("jrt:/java.compiler")
-
- Resolved
-
-
JDK-8216980 Incorrect call ClassLoaders.toFileURL("jrt:/java.compiler")
-
- Resolved
-
-
JDK-8217075 Incorrect call ClassLoaders.toFileURL("jrt:/java.compiler")
-
- Resolved
-
-
JDK-8219383 Incorrect call ClassLoaders.toFileURL("jrt:/java.compiler")
-
- Resolved
-