You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by pe...@apache.org on 2020/11/13 14:02:43 UTC

[commons-compress] branch master updated: COMPRESS-558: Fix accidentally added / to file names

This is an automated email from the ASF dual-hosted git repository.

peterlee 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 4f52e4a  COMPRESS-558: Fix accidentally added / to file names
4f52e4a is described below

commit 4f52e4a712ec47bd8360fee5e14dc591ed27ba85
Author: theobisproject <th...@gmail.com>
AuthorDate: Fri Nov 13 10:23:13 2020 +0100

    COMPRESS-558: Fix accidentally added / to file names
---
 .../archivers/tar/TarArchiveInputStream.java       |  6 ++---
 .../archivers/tar/TarArchiveInputStreamTest.java   | 26 ++++++++++++++++++++++
 2 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java
index 1f532b7..cdaf692 100644
--- a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java
@@ -409,11 +409,11 @@ public class TarArchiveInputStream extends ArchiveInputStream {
             }
 
             // COMPRESS-509 : the name of directories should end with '/'
-            String name = zipEncoding.decode(longNameData);
+            final String name = zipEncoding.decode(longNameData);
+            currEntry.setName(name);
             if (currEntry.isDirectory() && !name.endsWith("/")) {
-                name += "/";
+                currEntry.setName(name + "/");
             }
-            currEntry.setName(name);
         }
 
         if (currEntry.isGlobalPaxHeader()){ // Process Global Pax headers
diff --git a/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java b/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
index 31e6f1b..2103394 100644
--- a/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
@@ -478,6 +478,32 @@ public class TarArchiveInputStreamTest extends AbstractTestCase {
         }
     }
 
+    @Test
+    public void testCompress558() throws IOException {
+        final String folderName = "apache-activemq-5.16.0/examples/openwire/advanced-scenarios/jms-example-exclusive-consumer/src/main/";
+        final String consumerJavaName = "apache-activemq-5.16.0/examples/openwire/advanced-scenarios/jms-example-exclusive-consumer/src/main/java/example/queue/exclusive/Consumer.java";
+        final String producerJavaName = "apache-activemq-5.16.0/examples/openwire/advanced-scenarios/jms-example-exclusive-consumer/src/main/java/example/queue/exclusive/Producer.java";
+
+        final ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        try (final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos)) {
+            tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
+            TarArchiveEntry rootfolder = new TarArchiveEntry(folderName);
+            tos.putArchiveEntry(rootfolder);
+            TarArchiveEntry consumerJava = new TarArchiveEntry(consumerJavaName);
+            tos.putArchiveEntry(consumerJava);
+            TarArchiveEntry producerJava = new TarArchiveEntry(producerJavaName);
+            tos.putArchiveEntry(producerJava);
+            tos.closeArchiveEntry();
+        }
+        final byte[] data = bos.toByteArray();
+        try (final ByteArrayInputStream bis = new ByteArrayInputStream(data);
+             final TarArchiveInputStream tis = new TarArchiveInputStream(bis)) {
+            assertEquals(folderName, tis.getNextTarEntry().getName());
+            assertEquals(consumerJavaName, tis.getNextTarEntry().getName());
+            assertEquals(producerJavaName, tis.getNextTarEntry().getName());
+        }
+    }
+
     private TarArchiveInputStream getTestStream(final String name) {
         return new TarArchiveInputStream(
                 TarArchiveInputStreamTest.class.getResourceAsStream(name));