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) {

Reply via email to