Repository: commons-compress Updated Branches: refs/heads/master c36fef5f5 -> ced2075ca
Expose source of name/comment field value via dedicated methods Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/f488eba1 Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/f488eba1 Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/f488eba1 Branch: refs/heads/master Commit: f488eba11289fae758646a21f86b2ad6c4156538 Parents: e83b4d8 Author: Damiano Albani <damiano.alb...@gmail.com> Authored: Tue Dec 12 17:07:24 2017 +0100 Committer: Stefan Bodewig <bode...@apache.org> Committed: Fri Jan 5 17:25:27 2018 +0100 ---------------------------------------------------------------------- .../compress/archivers/zip/ZipArchiveEntry.java | 53 ++++++++++++++++---- .../commons/compress/archivers/zip/ZipFile.java | 32 ++++-------- .../commons/compress/archivers/zip/ZipUtil.java | 4 +- 3 files changed, 54 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-compress/blob/f488eba1/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 13eae15..846b6f7 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 @@ -59,6 +59,17 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry private static final int SHORT_SHIFT = 16; private static final byte[] EMPTY = new byte[0]; + public enum NameSource { + NAME, + NAME_WITH_EFS_FLAG, + UNICODE_EXTRA_FIELD + } + + public enum CommentSource { + COMMENT, + UNICODE_EXTRA_FIELD + } + /** * The {@link java.util.zip.ZipEntry} base class only supports * the compression methods STORED and DEFLATED. We override the @@ -98,8 +109,9 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry private long localHeaderOffset = OFFSET_UNKNOWN; private long dataOffset = OFFSET_UNKNOWN; private boolean isStreamContiguous = false; - private boolean hasUnicodeName = false; - private boolean hasUnicodeComment = false; + private NameSource nameSource = NameSource.NAME; + private CommentSource commentSource = CommentSource.COMMENT; + /** * Creates a new zip entry with the specified name. @@ -929,19 +941,40 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry this.rawFlag = rawFlag; } - public boolean hasUnicodeName() { - return hasUnicodeName; + /** + * The source of the name field value. + * @return source of the name field value + * @since 1.16 + */ + public NameSource getNameSource() { + return nameSource; } - public void setHasUnicodeName(boolean hasUnicodeName) { - this.hasUnicodeName = hasUnicodeName; + /** + * Sets the source of the name field value. + * @param nameSource source of the name field value + * @since 1.16 + */ + public void setNameSource(NameSource nameSource) { + this.nameSource = nameSource; } - public boolean hasUnicodeComment() { - return hasUnicodeComment; + /** + * The source of the comment field value. + * @return source of the comment field value + * @since 1.16 + */ + public CommentSource getCommentSource() { + return commentSource; } - public void setHasUnicodeComment(boolean hasUnicodeComment) { - this.hasUnicodeComment = hasUnicodeComment; + /** + * Sets the source of the comment field value. + * @param commentSource source of the comment field value + * @since 1.16 + */ + public void setCommentSource(CommentSource commentSource) { + this.commentSource = commentSource; } + } http://git-wip-us.apache.org/repos/asf/commons-compress/blob/f488eba1/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java index a76104f..1e30f31 100644 --- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java +++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java @@ -17,38 +17,21 @@ */ package org.apache.commons.compress.archivers.zip; -import java.io.BufferedInputStream; -import java.io.Closeable; -import java.io.EOFException; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; +import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; +import org.apache.commons.compress.utils.IOUtils; + +import java.io.*; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.channels.SeekableByteChannel; import java.nio.file.Files; import java.nio.file.StandardOpenOption; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.Enumeration; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.zip.Inflater; import java.util.zip.InflaterInputStream; import java.util.zip.ZipException; -import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; -import org.apache.commons.compress.utils.IOUtils; - -import static org.apache.commons.compress.archivers.zip.ZipConstants.DWORD; -import static org.apache.commons.compress.archivers.zip.ZipConstants.SHORT; -import static org.apache.commons.compress.archivers.zip.ZipConstants.WORD; -import static org.apache.commons.compress.archivers.zip.ZipConstants.ZIP64_MAGIC; -import static org.apache.commons.compress.archivers.zip.ZipConstants.ZIP64_MAGIC_SHORT; +import static org.apache.commons.compress.archivers.zip.ZipConstants.*; /** * Replacement for <code>java.util.ZipFile</code>. @@ -653,6 +636,9 @@ public class ZipFile implements Closeable { final boolean hasUTF8Flag = gpFlag.usesUTF8ForNames(); final ZipEncoding entryEncoding = hasUTF8Flag ? ZipEncodingHelper.UTF8_ZIP_ENCODING : zipEncoding; + if (hasUTF8Flag) { + ze.setNameSource(ZipArchiveEntry.NameSource.NAME_WITH_EFS_FLAG); + } ze.setGeneralPurposeBit(gpFlag); ze.setRawFlag(ZipShort.getValue(cfhBuf, off)); http://git-wip-us.apache.org/repos/asf/commons-compress/blob/f488eba1/src/main/java/org/apache/commons/compress/archivers/zip/ZipUtil.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipUtil.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipUtil.java index 11f7315..6342cd1 100644 --- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipUtil.java +++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipUtil.java @@ -239,7 +239,7 @@ public abstract class ZipUtil { originalNameBytes); if (newName != null && !originalName.equals(newName)) { ze.setName(newName); - ze.setHasUnicodeName(true); + ze.setNameSource(ZipArchiveEntry.NameSource.UNICODE_EXTRA_FIELD); } if (commentBytes != null && commentBytes.length > 0) { @@ -249,7 +249,7 @@ public abstract class ZipUtil { getUnicodeStringIfOriginalMatches(cmt, commentBytes); if (newComment != null) { ze.setComment(newComment); - ze.setHasUnicodeComment(true); + ze.setCommentSource(ZipArchiveEntry.CommentSource.UNICODE_EXTRA_FIELD); } } }