Stefan Bodewig schrieb: > On 2009-03-04, Stefan Bodewig <bode...@apache.org> wrote: > >> On 2009-03-03, Wolfgang Glas <wolfgang.g...@ev-i.at> wrote: > >>> The implementation should be be straightforward, shall I prepare a >>> patch or can you afford doing it at your own? > >> Will do it myself. > > svn revisions 749906 and 749907
Hello Stefan reviewed you code and found out, that you did not strictly use the same encoding for filenames and comments in one entry. A patch, which corrects this behaviour is attached. Regards, Wolfgang
Index: src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java =================================================================== --- src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java (Revision 750123) +++ src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java (Arbeitskopie) @@ -629,12 +629,16 @@ protected void writeLocalFileHeader(ZipArchiveEntry ze) throws IOException { boolean encodable = zipEncoding.canEncode(ze.getName()); - ByteBuffer name; + + final ZipEncoding entryEncoding; + if (!encodable && fallbackToUTF8) { - name = ZipEncodingHelper.UTF8_ZIP_ENCODING.encode(ze.getName()); + entryEncoding = ZipEncodingHelper.UTF8_ZIP_ENCODING; } else { - name = zipEncoding.encode(ze.getName()); + entryEncoding = zipEncoding; } + + ByteBuffer name = entryEncoding.encode(ze.getName()); if (createUnicodeExtraFields != UnicodeExtraFieldPolicy.NEVER) { @@ -653,7 +657,7 @@ if (createUnicodeExtraFields == UnicodeExtraFieldPolicy.ALWAYS || !commentEncodable) { - ByteBuffer commentB = this.zipEncoding.encode(comm); + ByteBuffer commentB = entryEncoding.encode(comm); ze.addExtraField(new UnicodeCommentExtraField(comm, commentB.array(), commentB.arrayOffset(), @@ -779,12 +783,16 @@ // CheckStyle:MagicNumber ON // file name length - ByteBuffer name; + final ZipEncoding entryEncoding; + if (!encodable && fallbackToUTF8) { - name = ZipEncodingHelper.UTF8_ZIP_ENCODING.encode(ze.getName()); + entryEncoding = ZipEncodingHelper.UTF8_ZIP_ENCODING; } else { - name = zipEncoding.encode(ze.getName()); + entryEncoding = zipEncoding; } + + ByteBuffer name = entryEncoding.encode(ze.getName()); + writeOut(ZipShort.getBytes(name.limit())); written += SHORT; @@ -798,12 +806,9 @@ if (comm == null) { comm = ""; } - ByteBuffer commentB; - if (!encodable && fallbackToUTF8) { - commentB = ZipEncodingHelper.UTF8_ZIP_ENCODING.encode(comm); - } else { - commentB = zipEncoding.encode(comm); - } + + ByteBuffer commentB = entryEncoding.encode(comm); + writeOut(ZipShort.getBytes(commentB.limit())); written += SHORT;
--------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org