This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-compress.git
The following commit(s) were added to refs/heads/master by this push: new 72a9342e3 Refactor constants and add a test check 72a9342e3 is described below commit 72a9342e316f42a67e556cb17faa9baccc0ff27b Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Wed Jan 17 07:07:59 2024 -0500 Refactor constants and add a test check --- .../compress/archivers/dump/DumpArchiveInputStream.java | 8 ++++++-- .../compress/archivers/sevenz/SevenZOutputFile.java | 2 -- .../java/org/apache/commons/compress/AbstractTest.java | 16 +++++++++++++--- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java b/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java index 35bf8e9df..d4cd84a91 100644 --- a/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java +++ b/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java @@ -44,6 +44,10 @@ import org.apache.commons.compress.utils.IOUtils; * @NotThreadSafe */ public class DumpArchiveInputStream extends ArchiveInputStream<DumpArchiveEntry> { + + private static final String CURRENT_PATH_SEGMENT = "."; + private static final String PARENT_PATH_SEGMENT = ".."; + /** * Look at the first few bytes of the file to decide if it's a dump archive. With 32 bytes we can look at the magic value, with a full 1k we can verify the * checksum. @@ -144,7 +148,7 @@ public class DumpArchiveInputStream extends ArchiveInputStream<DumpArchiveEntry> } // put in a dummy record for the root node. - final Dirent root = new Dirent(2, 2, 4, "."); + final Dirent root = new Dirent(2, 2, 4, CURRENT_PATH_SEGMENT); names.put(2, root); // use priority based on queue to ensure parent directories are @@ -492,7 +496,7 @@ public class DumpArchiveInputStream extends ArchiveInputStream<DumpArchiveEntry> final String name = DumpArchiveUtil.decode(zipEncoding, blockBuffer, i + 8, blockBuffer[i + 7]); - if (".".equals(name) || "..".equals(name)) { + if (CURRENT_PATH_SEGMENT.equals(name) || PARENT_PATH_SEGMENT.equals(name)) { // do nothing... continue; } diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java index eab13c467..c2424bf0e 100644 --- a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java +++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java @@ -123,9 +123,7 @@ public class SevenZOutputFile implements Closeable { private CountingOutputStream currentOutputStream; private CountingOutputStream[] additionalCountingStreams; private Iterable<? extends SevenZMethodConfiguration> contentMethods = Collections.singletonList(new SevenZMethodConfiguration(SevenZMethod.LZMA2)); - private final Map<SevenZArchiveEntry, long[]> additionalSizes = new HashMap<>(); - private AES256Options aes256Options; /** diff --git a/src/test/java/org/apache/commons/compress/AbstractTest.java b/src/test/java/org/apache/commons/compress/AbstractTest.java index a9bddbd1c..ea24bd363 100644 --- a/src/test/java/org/apache/commons/compress/AbstractTest.java +++ b/src/test/java/org/apache/commons/compress/AbstractTest.java @@ -48,6 +48,8 @@ import org.junit.jupiter.api.io.TempDir; public abstract class AbstractTest extends AbstractTempDirTest { + private static final String PARENT_PATH_SEGMENT = ".."; + protected interface StreamWrapper<I extends InputStream> { I wrap(InputStream inputStream) throws Exception; } @@ -157,7 +159,7 @@ public abstract class AbstractTest extends AbstractTempDirTest { try { ArchiveEntry entry; while ((entry = inputStream.getNextEntry()) != null) { - final Path outputFile = Paths.get(result.toString(), "result", entry.getName()); + final Path outputFile = Paths.get(result.toString(), "result", checkParentSegment(entry)); long bytesCopied = 0; if (entry.isDirectory()) { Files.createDirectories(outputFile); @@ -171,7 +173,7 @@ public abstract class AbstractTest extends AbstractTempDirTest { } if (!Files.exists(outputFile)) { - fail("Extraction failed: " + entry.getName()); + fail("Extraction failed: " + checkParentSegment(entry)); } if (expected != null && !expected.remove(getExpectedString(entry))) { fail("Unexpected entry: " + getExpectedString(entry)); @@ -217,6 +219,14 @@ public abstract class AbstractTest extends AbstractTempDirTest { } } + public static String checkParentSegment(final ArchiveEntry entry) { + final String name = entry.getName(); + if (name.contains(PARENT_PATH_SEGMENT)) { + throw new IllegalStateException("Archive entry contains the parent path segment \"..\""); + } + return name; + } + protected void closeQuietly(final Closeable closeable) { IOUtils.closeQuietly(closeable); } @@ -317,7 +327,7 @@ public abstract class AbstractTest extends AbstractTempDirTest { * @return returns the entry name */ protected String getExpectedString(final ArchiveEntry entry) { - return entry.getName(); + return checkParentSegment(entry); } protected void setLongFileMode(final ArchiveOutputStream<?> outputStream) {