diff options
author | Martin Polden <mpolden@mpolden.no> | 2022-04-04 11:09:30 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2022-04-04 15:26:43 +0200 |
commit | 99c0772a590343e5b910b31dd0ff291e00cc5228 (patch) | |
tree | a068fda1615b13fb93822b24bda8295db59e39ab /vespajlib | |
parent | 6e75b2fbedc7e6af66d3758499e26d99f61d0944 (diff) |
Ignore directories
Diffstat (limited to 'vespajlib')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/compress/ArchiveStreamReader.java | 3 | ||||
-rw-r--r-- | vespajlib/src/test/java/com/yahoo/compress/ArchiveStreamReaderTest.java | 10 |
2 files changed, 8 insertions, 5 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/compress/ArchiveStreamReader.java b/vespajlib/src/main/java/com/yahoo/compress/ArchiveStreamReader.java index 9f6bd5b1bb8..9b60518e7b6 100644 --- a/vespajlib/src/main/java/com/yahoo/compress/ArchiveStreamReader.java +++ b/vespajlib/src/main/java/com/yahoo/compress/ArchiveStreamReader.java @@ -56,6 +56,7 @@ public class ArchiveStreamReader implements AutoCloseable { while ((entry = archiveInputStream.getNextEntry()) != null) { Path path = Path.fromString(requireNormalized(entry.getName())); if (isSymlink(entry)) throw new IllegalArgumentException("Archive entry " + path + " is a symbolic link, which is disallowed"); + if (entry.isDirectory()) continue; if (!options.pathPredicate.test(path.toString())) continue; long size = 0; @@ -140,7 +141,7 @@ public class ArchiveStreamReader implements AutoCloseable { private static String requireNormalized(String name) { for (var part : name.split("/")) { - if (part.equals(".") || part.equals("..") || part.isEmpty()) { + if (part.isEmpty() || part.equals(".") || part.equals("..")) { throw new IllegalArgumentException("Unexpected non-normalized path found in zip content: '" + name + "'"); } } diff --git a/vespajlib/src/test/java/com/yahoo/compress/ArchiveStreamReaderTest.java b/vespajlib/src/test/java/com/yahoo/compress/ArchiveStreamReaderTest.java index a2ad82b0722..847ab4124d3 100644 --- a/vespajlib/src/test/java/com/yahoo/compress/ArchiveStreamReaderTest.java +++ b/vespajlib/src/test/java/com/yahoo/compress/ArchiveStreamReaderTest.java @@ -27,11 +27,13 @@ class ArchiveStreamReaderTest { @Test void reading() { - Map<String, String> zipContents = Map.of("foo", "contents of foo", - "bar", "contents of bar", - "baz", "0".repeat(2049)); + Map<String, String> zipFiles = Map.of("foo", "contents of foo", + "bar", "contents of bar", + "baz", "0".repeat(2049)); + Map<String, String> zipContents = new HashMap<>(zipFiles); + zipContents.put("dir/", ""); // Directories are always ignored Map<String, String> extracted = readAll(zip(zipContents), Options.standard()); - assertEquals(zipContents, extracted); + assertEquals(zipFiles, extracted); } @Test |