test/java/util/zip/ZipFile/ReadZip.java

Print this page

        

*** 20,42 **** * or visit www.oracle.com if you need additional information or have any * questions. */ /* @test ! @bug 4241361 4842702 4985614 6646605 5032358 6923692 6233323 8144977 @summary Make sure we can read a zip file. @key randomness */ import java.io.*; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.NoSuchFileException; import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; import java.util.zip.*; public class ReadZip { private static void unreached (Object o) throws Exception { // Should never get here --- 20,50 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ /* @test ! @bug 4241361 4842702 4985614 6646605 5032358 6923692 6233323 8144977 8186464 @summary Make sure we can read a zip file. @key randomness */ import java.io.*; + import java.net.URI; import java.nio.file.Files; + import java.nio.file.FileSystem; + import java.nio.file.FileSystems; + import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.NoSuchFileException; import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; + import java.util.List; + import java.util.Map; import java.util.zip.*; + import static java.nio.charset.StandardCharsets.US_ASCII; + public class ReadZip { private static void unreached (Object o) throws Exception { // Should never get here
*** 135,150 **** } } finally { newZip.delete(); } - - // Throw a FNF exception when read a non-existing zip file try { unreached (new ZipFile( new File(System.getProperty("test.src", "."), "input" + String.valueOf(new java.util.Random().nextInt()) + ".zip"))); } catch (NoSuchFileException nsfe) {} } } --- 143,205 ---- } } finally { newZip.delete(); } // Throw a FNF exception when read a non-existing zip file try { unreached (new ZipFile( new File(System.getProperty("test.src", "."), "input" + String.valueOf(new java.util.Random().nextInt()) + ".zip"))); } catch (NoSuchFileException nsfe) {} + + // read a zip file with ZIP64 end + Path path = Paths.get(System.getProperty("test.dir", ""), "end64.zip"); + try { + URI uri = URI.create("jar:" + path.toUri()); + Map<String, Object> env = Map.of("create", "true", "forceZIP64End", "true"); + try (FileSystem fs = FileSystems.newFileSystem(uri, env)) { + Files.write(fs.getPath("hello"), "hello".getBytes()); + } + try (ZipFile zf = new ZipFile(path.toFile())) { + if (!"hello".equals(new String(zf.getInputStream(new ZipEntry("hello")) + .readAllBytes(), + US_ASCII))) + throw new RuntimeException("zipfile: read entry failed"); + } catch (IOException x) { + throw new RuntimeException("zipfile: zip64 end failed"); + } + try (FileSystem fs = FileSystems.newFileSystem(uri, Map.of())) { + if (!"hello".equals(new String(Files.readAllBytes(fs.getPath("hello"))))) + throw new RuntimeException("zipfs: read entry failed"); + } catch (IOException x) { + throw new RuntimeException("zipfile: zip64 end failed"); + } + } finally { + Files.deleteIfExists(path); + } + + // read a zip file created via "echo hello | zip dst.zip -", which uses + // ZIP64 end record + if (Files.notExists(Paths.get("/usr/bin/zip"))) + return; + try { + Process zip = new ProcessBuilder("zip", path.toString().toString(), "-").start(); + OutputStream os = zip.getOutputStream(); + os.write("hello".getBytes(US_ASCII)); + os.close(); + zip.waitFor(); + if (zip.exitValue() == 0 && Files.exists(path)) { + try (ZipFile zf = new ZipFile(path.toFile())) { + if (!"hello".equals(new String(zf.getInputStream(new ZipEntry("-")) + .readAllBytes()))) + throw new RuntimeException("zipfile: read entry failed"); + } catch (IOException x) { + throw new RuntimeException("zipfile: zip64 end failed"); + } + } + } finally { + Files.deleteIfExists(path); + } } }