From 4e83c1c4dc77e64c3e31dd2d1498658e19da8a5a Mon Sep 17 00:00:00 2001 From: Jim Laskey Date: Tue, 28 May 2019 16:51:28 -0300 Subject: [PATCH] 8224908: Revert: 8216553: JrtFileSystemProvider getPath(URI) omits /modules element from file path Reviewed-by: darcy, kbarrett --- .../internal/jrtfs/JrtFileSystemProvider.java | 4 +- .../classes/jdk/internal/jrtfs/JrtPath.java | 12 +---- test/jdk/jdk/internal/jrtfs/Basic.java | 48 +------------------ test/langtools/tools/lib/toolbox/JarTask.java | 4 +- 4 files changed, 7 insertions(+), 61 deletions(-) diff --git a/src/java.base/share/classes/jdk/internal/jrtfs/JrtFileSystemProvider.java b/src/java.base/share/classes/jdk/internal/jrtfs/JrtFileSystemProvider.java index ad64d9939c..1297603529 100644 --- a/src/java.base/share/classes/jdk/internal/jrtfs/JrtFileSystemProvider.java +++ b/src/java.base/share/classes/jdk/internal/jrtfs/JrtFileSystemProvider.java @@ -190,10 +190,10 @@ public final class JrtFileSystemProvider extends FileSystemProvider { throw new IllegalArgumentException("Fragment component present"); } String path = uri.getPath(); - if (path == null || path.charAt(0) != '/' || path.contains("..")) { + if (path == null || path.charAt(0) != '/') { throw new IllegalArgumentException("Invalid path component"); } - return getTheFileSystem().getPath("/modules" + path); + return getTheFileSystem().getPath(path); } private FileSystem getTheFileSystem() { diff --git a/src/java.base/share/classes/jdk/internal/jrtfs/JrtPath.java b/src/java.base/share/classes/jdk/internal/jrtfs/JrtPath.java index cb19f93a26..39a22f640f 100644 --- a/src/java.base/share/classes/jdk/internal/jrtfs/JrtPath.java +++ b/src/java.base/share/classes/jdk/internal/jrtfs/JrtPath.java @@ -25,7 +25,6 @@ package jdk.internal.jrtfs; import java.io.File; -import java.io.IOError; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -171,16 +170,7 @@ final class JrtPath implements Path { @Override public final URI toUri() { try { - String p = toAbsolutePath().path; - if (!p.startsWith("/modules") || p.contains("..")) { - throw new IOError(new RuntimeException(p + " cannot be represented as URI")); - } - - p = p.substring("/modules".length()); - if (p.isEmpty()) { - p = "/"; - } - return new URI("jrt", p, null); + return new URI("jrt", toAbsolutePath().path, null); } catch (URISyntaxException ex) { throw new AssertionError(ex); } diff --git a/test/jdk/jdk/internal/jrtfs/Basic.java b/test/jdk/jdk/internal/jrtfs/Basic.java index 40b90027e9..21b4de3896 100644 --- a/test/jdk/jdk/internal/jrtfs/Basic.java +++ b/test/jdk/jdk/internal/jrtfs/Basic.java @@ -28,7 +28,6 @@ */ import java.io.InputStream; -import java.io.IOError; import java.io.IOException; import java.io.DataInputStream; import java.nio.file.DirectoryStream; @@ -272,60 +271,17 @@ public class Basic { Path top = fs.getPath("/"); try (Stream stream = Files.walk(top)) { stream.forEach(path -> { - String pathStr = path.toAbsolutePath().toString(); - URI u = null; - try { - u = path.toUri(); - } catch (IOError e) { - assertFalse(pathStr.startsWith("/modules")); - return; - } - + URI u = path.toUri(); assertTrue(u.getScheme().equalsIgnoreCase("jrt")); assertFalse(u.isOpaque()); assertTrue(u.getAuthority() == null); - - pathStr = pathStr.substring("/modules".length()); - if (pathStr.isEmpty()) { - pathStr = "/"; - } - assertEquals(u.getPath(), pathStr); + assertEquals(u.getPath(), path.toAbsolutePath().toString()); Path p = Paths.get(u); assertEquals(p, path); }); } } - // @bug 8216553: JrtFIleSystemProvider getPath(URI) omits /modules element from file path - @Test - public void testPathToURIConversion() throws Exception { - var uri = URI.create("jrt:/java.base/module-info.class"); - var path = Path.of(uri); - assertTrue(Files.exists(path)); - - uri = URI.create("jrt:/java.base/../java.base/module-info.class"); - boolean seenIAE = false; - try { - Path.of(uri); - } catch (IllegalArgumentException iaExp) { - seenIAE = true; - } - assertTrue(seenIAE); - - // check round-trip - var jrtfs = FileSystems.getFileSystem(URI.create("jrt:/")); - assertTrue(Files.exists(jrtfs.getPath(path.toString()))); - - path = jrtfs.getPath("/modules/../modules/java.base/"); - boolean seenIOError = false; - try { - path.toUri(); - } catch (IOError ioError) { - seenIOError = true; - } - assertTrue(seenIOError); - } - @Test public void testDirectoryNames() throws Exception { FileSystem fs = FileSystems.getFileSystem(URI.create("jrt:/")); diff --git a/test/langtools/tools/lib/toolbox/JarTask.java b/test/langtools/tools/lib/toolbox/JarTask.java index d43432b315..0d15d12200 100644 --- a/test/langtools/tools/lib/toolbox/JarTask.java +++ b/test/langtools/tools/lib/toolbox/JarTask.java @@ -377,9 +377,9 @@ public class JarTask extends AbstractTask { private final Pattern jarEntry = Pattern.compile(".*!/(?:META-INF/sym/[^/]+/)?(.*)"); /* - * A jrt: URL is of the form jrt:/// + * A jrt: URL is of the form jrt:/modules/// */ - private final Pattern jrtEntry = Pattern.compile("/([^/]+)/(.*)"); + private final Pattern jrtEntry = Pattern.compile("/modules/([^/]+)/(.*)"); /* * A file: URL is of the form file:/path/to/{modules,patches}///