[
https://issues.apache.org/jira/browse/COMPRESS-394?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Stefan Bodewig resolved COMPRESS-394.
-------------------------------------
Resolution: Fixed
should be fixed in master, would be good if you could double-check.
> [Zip] Local `Version Needed To Extract` does not match Central Directory
> ------------------------------------------------------------------------
>
> Key: COMPRESS-394
> URL: https://issues.apache.org/jira/browse/COMPRESS-394
> Project: Commons Compress
> Issue Type: Bug
> Components: Archivers
> Reporter: Plamen Totev
> Priority: Minor
> Labels: zip
> Fix For: 1.15
>
>
> Hi,
> This is followup on an issue reported on Plexus Archiver -
> https://github.com/codehaus-plexus/plexus-archiver/issues/57
> Plexus Archiver uses {{ZipArchiveOutputStream}} to create zip archives. It
> constructs the {{ZipArchiveOutputStream}} using {{BufferedOutputStream}}. As
> a result the output do not provide random access and additional data
> descriptor records are added. Unfortunately this leads to different values
> being set for {{version needed to extract}} field in the local file header
> and in the central directory. It looks like that the root cause is the way
> the local header {{version needed to extract}} field value is calculated:
> {code:java}
> if (phased && !isZip64Required(entry.entry, zip64Mode)){
> putShort(INITIAL_VERSION, buf, LFH_VERSION_NEEDED_OFFSET);
> } else {
> putShort(versionNeededToExtract(zipMethod, hasZip64Extra(ze)),
> buf, LFH_VERSION_NEEDED_OFFSET);
> }
> {code}
> As you can see the need for data descriptors is not taken into account. On
> other hand when the central directory is created the following is used to
> determine the minimum required version
> {code:java}
> private int versionNeededToExtract(final int zipMethod, final boolean
> zip64) {
> if (zip64) {
> return ZIP64_MIN_VERSION;
> }
> // requires version 2 as we are going to store length info
> // in the data descriptor
> return (isDeflatedToOutputStream(zipMethod)) ?
> DATA_DESCRIPTOR_MIN_VERSION :
> INITIAL_VERSION;
> }
> {code}
> As a side note: I'm not a zip expert by any means so I could be wrong, but my
> understanding is that if Deflate compression is used then the minimum
> required version should be 2.0 regardless if data descriptors are used or not.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)