Repository: commons-compress Updated Branches: refs/heads/master 75ba40cd9 -> c59fc43c5
COMPRESS-379 fix symlink logic Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/c59fc43c Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/c59fc43c Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/c59fc43c Branch: refs/heads/master Commit: c59fc43c527610ae18d7596eb191817ce674cb29 Parents: 75ba40c Author: Stefan Bodewig <[email protected]> Authored: Sun Jan 15 22:07:19 2017 +0100 Committer: Stefan Bodewig <[email protected]> Committed: Sun Jan 15 22:07:19 2017 +0100 ---------------------------------------------------------------------- src/changes/changes.xml | 5 +++++ .../commons/compress/archivers/zip/UnixStat.java | 5 +++++ .../compress/archivers/zip/ZipArchiveEntry.java | 2 +- .../compress/archivers/zip/ZipArchiveEntryTest.java | 12 ++++++++++++ src/test/resources/COMPRESS-379.jar | Bin 0 -> 222 bytes 5 files changed, 23 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-compress/blob/c59fc43c/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 6b55698..5ec0569 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -56,6 +56,11 @@ The <action> type attribute can be add,update,fix,remove. configured as some IWA files seem to be using blocks larger than the default 32k. </action> + <action issue="COMPRESS-379" type="fix" date="2017-01-15" + due-to="Guillaume Boué"> + ZipArchiveEntry#isUnixSymlink now only returns true if the + corresponding link flag is the only file-type flag set. + </action> </release> <release version="1.13" date="2016-12-29" description="Release 1.13 - API compatible to 1.12 but requires Java 7 at runtime."> http://git-wip-us.apache.org/repos/asf/commons-compress/blob/c59fc43c/src/main/java/org/apache/commons/compress/archivers/zip/UnixStat.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/UnixStat.java b/src/main/java/org/apache/commons/compress/archivers/zip/UnixStat.java index b8afc6b..a1b20be 100644 --- a/src/main/java/org/apache/commons/compress/archivers/zip/UnixStat.java +++ b/src/main/java/org/apache/commons/compress/archivers/zip/UnixStat.java @@ -29,6 +29,11 @@ public interface UnixStat { */ int PERM_MASK = 07777; /** + * Bits used to indicate the filesystem object type. + * @since 1.14 + */ + int FILE_TYPE_FLAG = 0170000; + /** * Indicates symbolic links. */ int LINK_FLAG = 0120000; http://git-wip-us.apache.org/repos/asf/commons-compress/blob/c59fc43c/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java index 5030da5..2abd22b 100644 --- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java +++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java @@ -294,7 +294,7 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry * @return true if the entry represents a unix symlink, false otherwise. */ public boolean isUnixSymlink() { - return (getUnixMode() & UnixStat.LINK_FLAG) == UnixStat.LINK_FLAG; + return (getUnixMode() & UnixStat.FILE_TYPE_FLAG) == UnixStat.LINK_FLAG; } /** http://git-wip-us.apache.org/repos/asf/commons-compress/blob/c59fc43c/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntryTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntryTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntryTest.java index 320b2ff..be003df 100644 --- a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntryTest.java +++ b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntryTest.java @@ -18,6 +18,7 @@ package org.apache.commons.compress.archivers.zip; +import static org.apache.commons.compress.AbstractTestCase.getFile; import static org.junit.Assert.*; import java.io.ByteArrayOutputStream; @@ -268,4 +269,15 @@ public class ZipArchiveEntryTest { final ZipArchiveEntry copy = new ZipArchiveEntry(archiveEntry); assertEquals(archiveEntry, copy); } + + /** + * @see "https://issues.apache.org/jira/browse/COMPRESS-379" + */ + @Test + public void isUnixSymlinkIsFalseIfMoreThanOneFlagIsSet() throws Exception { + try (ZipFile zf = new ZipFile(getFile("COMPRESS-379.jar"))) { + ZipArchiveEntry ze = zf.getEntry("META-INF/maven/"); + assertFalse(ze.isUnixSymlink()); + } + } } http://git-wip-us.apache.org/repos/asf/commons-compress/blob/c59fc43c/src/test/resources/COMPRESS-379.jar ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-379.jar b/src/test/resources/COMPRESS-379.jar new file mode 100644 index 0000000..8211f32 Binary files /dev/null and b/src/test/resources/COMPRESS-379.jar differ
