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

Stefan Bodewig commented on COMPRESS-479:
-----------------------------------------

I didn't realize our code was the one throwing the exception already, sorry. 
It's been a while since I last looked at that part of the code base.

There are two ways to look at this, one is "I want to know if my archive 
contains extra fields that don't adhere to the spec" and the other one is "I 
don't care for errors in extra fields, give me the data". So far we've been on 
the first side - see for example the handling for runtime exceptions at 
https://github.com/apache/commons-compress/blob/master/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java#L184
 

I'm currently pondering the idea of making the behavior user controlled much 
like the {{onUnparseableData}} argument to {{ExtraFieldUtis#parse}} and am 
unsure about what should be the default. Making a more lenient parser that 
catches exceptions and turns the extra fields causing exceptions into 
{{UnrecognizedExtraField}} instances the default would break backwards 
compatibility in a way, but likely in an acceptable way as the difference will 
be we can read archives that have failed before.

> Unable to extract Zip with unknown UniCode path extra data version
> ------------------------------------------------------------------
>
>                 Key: COMPRESS-479
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-479
>             Project: Commons Compress
>          Issue Type: Bug
>    Affects Versions: 1.18
>            Reporter: Robin Schimpf
>            Priority: Major
>             Fix For: 1.19
>
>         Attachments: unicode-test10509149899131946592.zip
>
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> The following exception is thrown when the version of the UniCode path extra 
> data version is not 1. 7-Zip and Windows Explorer will extract the attached 
> file. The version in the file was changed via a Hex editor to provoke the 
> error.
> {code:java}
> java.lang.RuntimeException: Error parsing extra fields for entry: 
> %U20AC_for_Dollar.txt - Unsupported version [116] for UniCode path extra data.
>       at 
> org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setExtra(ZipArchiveEntry.java:626)
>       at 
> org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextZipEntry(ZipArchiveInputStream.java:315)
>       at 
> org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextEntry(ZipArchiveInputStream.java:408)
>       at 
> org.apache.commons.compress.archivers.zip.UTF8ZipFilesTest.testZipFileReadsUnicodeFields(UTF8ZipFilesTest.java:186)
> ...
> Caused by: java.util.zip.ZipException: Unsupported version [116] for UniCode 
> path extra data.
>       at 
> org.apache.commons.compress.archivers.zip.AbstractUnicodeExtraField.parseFromLocalFileData(AbstractUnicodeExtraField.java:172)
>       at 
> org.apache.commons.compress.archivers.zip.ExtraFieldUtils.parse(ExtraFieldUtils.java:180)
>       at 
> org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setExtra(ZipArchiveEntry.java:620)
> {code}
> As I understand the specification in Section 4.6.8 and 4.6.9 when the version 
> is unknown the information shoule be ignored.
> Changes MAY NOT be backward compatible so this extra field *SHOULD NOT be 
> used if the version is not recognized*.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to