You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Peter Lee (Jira)" <ji...@apache.org> on 2020/06/16 07:31:00 UTC

[jira] [Commented] (COMPRESS-538) ZipEntry created using ZipArchiveOutputStream(File) constructor adds 'ZIP64 Extended Information Extra Field' even when zip64 is not required.

    [ https://issues.apache.org/jira/browse/COMPRESS-538?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17136390#comment-17136390 ] 

Peter Lee commented on COMPRESS-538:
------------------------------------

Commons Compress will add zip64 extra field in the following cases:

1, The Zip64Mode is Zip64Mode.Always : you can modify this by entry.setUnixMode;

2, The uncompressed size or compressed size of the entry is large so we need to use zip64;

3, The uncompressed size of the entry is unknown and the Zip64Mode is NOT Zip64Mode.Never : we do not know the entry's uncompressed size, so we add a zip64 extra here in case of it's too large.

In your particular testcase, you're experiencing the third case I have listed. You can simply avoid this by specifying the size of the file :
{code:java}
@Test
public void testExtra() throws IOException {
    // Create file
    final File file = File.createTempFile("apache_", ".zip");
    try ( ZipArchiveOutputStream zos = new ZipArchiveOutputStream(file)) {
        ZipArchiveEntry entry = new ZipArchiveEntry("TextFile1.txt");
        entry.setSize(0);
        zos.putArchiveEntry(entry);
        zos.closeArchiveEntry();
    }

    // List Headers File
    final ZipFile zipFile = new ZipFile(file);
    final Enumeration<? extends ZipArchiveEntry> entries = zipFile.getEntries();
    while (entries.hasMoreElements()) {
        final ZipArchiveEntry entry = entries.nextElement();
        for (ZipExtraField zipExtraField : entry.getExtraFields()) {
            System.out.println("EntryName:" + entry.getName() + " Header: "+ zipExtraField.getHeaderId().getValue()); // Header shouldn't be present.
        }
    }
}
{code}
BTW : the affected version you set is 1.8 but the latest release of Commons Compress is 1.20. I'm only testing this in 1.20.

> ZipEntry created using ZipArchiveOutputStream(File) constructor adds 'ZIP64 Extended Information Extra Field' even when zip64 is not required.
> ----------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: COMPRESS-538
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-538
>             Project: Commons Compress
>          Issue Type: Bug
>          Components: Archivers
>    Affects Versions: 1.8
>            Reporter: Pritesh
>            Priority: Major
>
> When creating a zip file using [ZipArchiveOutputStream(File)|https://commons.apache.org/proper/commons-compress/apidocs/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.html#ZipArchiveOutputStream-java.io.File-] constructor each entry get an extra `Zip64ExtendedInformationExtraField` header which shouldn't be there.
>  
> The issue can be reproduced using below code sample
> {code:java}
>     public static void main(String[] args) throws IOException {
>         // Create file
>         final File file = File.createTempFile("apache_", ".zip");
>         try ( ZipArchiveOutputStream zos = new ZipArchiveOutputStream(file)) {
>             zos.putArchiveEntry(new ZipArchiveEntry("TextFile1.txt"));
>             zos.closeArchiveEntry();
>         }
>         // List Headers File
>         final ZipFile zipFile = new ZipFile(file);
>         final Enumeration<? extends ZipArchiveEntry> entries = zipFile.getEntries();
>         while (entries.hasMoreElements()) {
>             final ZipArchiveEntry entry = entries.nextElement();
>             for (ZipExtraField zipExtraField : entry.getExtraFields()) {
>                 System.out.println("EntryName:" + entry.getName() + " Header: "+ zipExtraField.getHeaderId().getValue()); // Header shouldn't be present.
>             }
>         }
>     }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)