Merge
This commit is contained in:
commit
e4325bfd90
@ -190,10 +190,10 @@ public final class JrtFileSystemProvider extends FileSystemProvider {
|
|||||||
throw new IllegalArgumentException("Fragment component present");
|
throw new IllegalArgumentException("Fragment component present");
|
||||||
}
|
}
|
||||||
String path = uri.getPath();
|
String path = uri.getPath();
|
||||||
if (path == null || path.charAt(0) != '/') {
|
if (path == null || path.charAt(0) != '/' || path.contains("..")) {
|
||||||
throw new IllegalArgumentException("Invalid path component");
|
throw new IllegalArgumentException("Invalid path component");
|
||||||
}
|
}
|
||||||
return getTheFileSystem().getPath(path);
|
return getTheFileSystem().getPath("/modules" + path);
|
||||||
}
|
}
|
||||||
|
|
||||||
private FileSystem getTheFileSystem() {
|
private FileSystem getTheFileSystem() {
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
package jdk.internal.jrtfs;
|
package jdk.internal.jrtfs;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOError;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
@ -170,7 +171,16 @@ final class JrtPath implements Path {
|
|||||||
@Override
|
@Override
|
||||||
public final URI toUri() {
|
public final URI toUri() {
|
||||||
try {
|
try {
|
||||||
return new URI("jrt", toAbsolutePath().path, null);
|
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);
|
||||||
} catch (URISyntaxException ex) {
|
} catch (URISyntaxException ex) {
|
||||||
throw new AssertionError(ex);
|
throw new AssertionError(ex);
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,7 @@ compiler/types/correctness/CorrectnessTest.java 8066173 generic-all
|
|||||||
compiler/types/correctness/OffTest.java 8066173 generic-all
|
compiler/types/correctness/OffTest.java 8066173 generic-all
|
||||||
|
|
||||||
compiler/c2/Test6852078.java 8194310 generic-all
|
compiler/c2/Test6852078.java 8194310 generic-all
|
||||||
|
compiler/c2/Test8004741.java 8214904 generic-all
|
||||||
|
|
||||||
compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java 8190680 generic-all
|
compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java 8190680 generic-all
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.io.IOError;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.nio.file.DirectoryStream;
|
import java.nio.file.DirectoryStream;
|
||||||
@ -271,17 +272,60 @@ public class Basic {
|
|||||||
Path top = fs.getPath("/");
|
Path top = fs.getPath("/");
|
||||||
try (Stream<Path> stream = Files.walk(top)) {
|
try (Stream<Path> stream = Files.walk(top)) {
|
||||||
stream.forEach(path -> {
|
stream.forEach(path -> {
|
||||||
URI u = path.toUri();
|
String pathStr = path.toAbsolutePath().toString();
|
||||||
|
URI u = null;
|
||||||
|
try {
|
||||||
|
u = path.toUri();
|
||||||
|
} catch (IOError e) {
|
||||||
|
assertFalse(pathStr.startsWith("/modules"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
assertTrue(u.getScheme().equalsIgnoreCase("jrt"));
|
assertTrue(u.getScheme().equalsIgnoreCase("jrt"));
|
||||||
assertFalse(u.isOpaque());
|
assertFalse(u.isOpaque());
|
||||||
assertTrue(u.getAuthority() == null);
|
assertTrue(u.getAuthority() == null);
|
||||||
assertEquals(u.getPath(), path.toAbsolutePath().toString());
|
|
||||||
|
pathStr = pathStr.substring("/modules".length());
|
||||||
|
if (pathStr.isEmpty()) {
|
||||||
|
pathStr = "/";
|
||||||
|
}
|
||||||
|
assertEquals(u.getPath(), pathStr);
|
||||||
Path p = Paths.get(u);
|
Path p = Paths.get(u);
|
||||||
assertEquals(p, path);
|
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
|
@Test
|
||||||
public void testDirectoryNames() throws Exception {
|
public void testDirectoryNames() throws Exception {
|
||||||
FileSystem fs = FileSystems.getFileSystem(URI.create("jrt:/"));
|
FileSystem fs = FileSystems.getFileSystem(URI.create("jrt:/"));
|
||||||
|
@ -377,9 +377,9 @@ public class JarTask extends AbstractTask<JarTask> {
|
|||||||
private final Pattern jarEntry = Pattern.compile(".*!/(?:META-INF/sym/[^/]+/)?(.*)");
|
private final Pattern jarEntry = Pattern.compile(".*!/(?:META-INF/sym/[^/]+/)?(.*)");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A jrt: URL is of the form jrt:/modules/<module>/<package>/<file>
|
* A jrt: URL is of the form jrt:/<module>/<package>/<file>
|
||||||
*/
|
*/
|
||||||
private final Pattern jrtEntry = Pattern.compile("/modules/([^/]+)/(.*)");
|
private final Pattern jrtEntry = Pattern.compile("/([^/]+)/(.*)");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A file: URL is of the form file:/path/to/{modules,patches}/<module>/<package>/<file>
|
* A file: URL is of the form file:/path/to/{modules,patches}/<module>/<package>/<file>
|
||||||
|
Loading…
Reference in New Issue
Block a user