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 <theobisproj...@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));