blob: 03b2ce9a6d25665a0578bf1215142e765dafd7ec [file] [log] [blame]
Stefan Bodewigbdd4bd62015-01-30 08:14:03 +00001 Apache Commons Compress RELEASE NOTES
Sebastian Bazley48882f12010-04-13 21:02:37 +00002
Stefan Bodewig4a154172013-10-13 04:06:16 +00003Apache Commons Compress software defines an API for working with
4compression and archive formats. These include: bzip2, gzip, pack200,
Stefan Bodewigde633062014-10-09 12:00:48 +00005lzma, xz, Snappy, traditional Unix Compress, DEFLATE and ar, cpio,
6jar, tar, zip, dump, 7z, arj.
7
Stefan Bodewigec075142015-01-26 05:12:09 +00008Release 1.10
9------------
10
11Release 1.10 moves the former
12org.apache.commons.compress.compressors.z._internal_ package which
13breaks backwards compatibility for code which used the old package.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000014
15This also changes the superclass of ZCompressorInputStream which makes
16this class binary incompatible with the one of Compress 1.9. Code
17that extends ZCompressorInputStream will need to be recompiled in
18order to work with Compress 1.10.
Stefan Bodewigc100d2e2015-01-30 08:24:54 +000019
Stefan Bodewigec075142015-01-26 05:12:09 +000020New features:
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000021o CompressorStreamFactory can now auto-detect DEFLATE streams
22 with ZLIB header.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010023 Issue: COMPRESS-316. Thanks to Nick Burch.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000024o CompressorStreamFactory can now auto-detect LZMA streams.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010025 Issue: COMPRESS-313.
Stefan Bodewigec075142015-01-26 05:12:09 +000026o Added support for parallel compression. This low-level API allows
27 a client to build a zip/jar file by using the class
28 org.apache.commons.compress.archivers.zip.ParallelScatterZipCreator.
29
30 Zip documentation updated with further notes about parallel features.
31
32 Please note that some aspects of jar creation need to be
33 handled by client code and is not part of commons-compress for this
34 release.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010035 Issue: COMPRESS-296. Thanks to Kristian Rosenvold.
Stefan Bodewigec075142015-01-26 05:12:09 +000036o Cut overall object instantiation in half by changing file
37 header generation algorithm, for a 10-15 percent performance
38 improvement.
39
40 Also extracted two private methods createLocalFileHeader
41 and createCentralFileHeader in ZipArchiveOutputStream.
42 These may have some interesting additional usages in the
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010043 near future. Thanks to Kristian Rosenvold.
Stefan Bodewigec075142015-01-26 05:12:09 +000044o New methods in ZipArchiveOutputStream and ZipFile allows
45 entries to be copied from one archive to another without
46 having to re-compress them.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010047 Issue: COMPRESS-295. Thanks to Kristian Rosenvold.
Stefan Bodewigec075142015-01-26 05:12:09 +000048
49Fixed Bugs:
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000050o TarArchiveInputStream can now read entries with group or
51 user ids > 0x80000000.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010052 Issue: COMPRESS-314.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000053o TarArchiveOutputStream can now write entries with group or
54 user ids > 0x80000000.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010055 Issue: COMPRESS-315.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000056o TarArchiveEntry's constructor with a File and a String arg
57 didn't normalize the name.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010058 Issue: COMPRESS-312.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000059o ZipEncodingHelper no longer reads system properties directly
60 to determine the default charset.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010061 Issue: COMPRESS-308.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000062o BZip2CompressorInputStream#read would return -1 when asked to
63 read 0 bytes.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010064 Issue: COMPRESS-309.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000065o ArchiveStreamFactory fails to pass on the encoding when creating
66 some streams.
67 * ArjArchiveInputStream
68 * CpioArchiveInputStream
69 * DumpArchiveInputStream
70 * JarArchiveInputStream
71 * TarArchiveInputStream
72 * JarArchiveOutputStream
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010073 Issue: COMPRESS-306.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000074o Restore immutability/thread-safety to ArchiveStreamFactory.
75 The class is now immutable provided that the method setEntryEncoding
76 is not used. The class is thread-safe.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010077 Issue: COMPRESS-302.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000078o Restore immutability/thread-safety to CompressorStreamFactory.
79 The class is now immutable provided that the method
80 setDecompressConcatenated is not used. The class is thread-safe.
81 Issue: COMPRESS-303.
Stefan Bodewigec075142015-01-26 05:12:09 +000082o ZipFile logs a warning in its finalizer when its constructor
83 has thrown an exception reading the file - for example if the
84 file doesn't exist.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010085 Issue: COMPRESS-297.
Stefan Bodewigec075142015-01-26 05:12:09 +000086o Improved error message when tar encounters a groupId that is
87 too big to write without using the STAR or POSIX format.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010088 Issue: COMPRESS-290. Thanks to Kristian Rosenvold.
Stefan Bodewigec075142015-01-26 05:12:09 +000089o SevenZFile now throws the specific PasswordRequiredException
90 when it encounters an encrypted stream but no password has
91 been specified.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010092 Issue: COMPRESS-298.
Stefan Bodewigec075142015-01-26 05:12:09 +000093
94Changes:
95o Moved the package
96 org.apache.commons.compress.compressors.z._internal_ to
97 org.apache.commons.compress.compressors.lzw and made it part
98 of the API that is officially supported. This will break
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010099 existing code that uses the old package. Thanks to Damjan Jovanovic.
Stefan Bodewigec075142015-01-26 05:12:09 +0000100
101For complete information on Apache Commons Compress, including instructions
102on how to submit bug reports, patches, or suggestions for improvement,
103see the Apache Commons Compress website:
104
105http://commons.apache.org/compress/
106
107Old Release Notes
108=================
109
Stefan Bodewigde633062014-10-09 12:00:48 +0000110Release 1.9
111-----------
112
113New features:
114o Added support for DEFLATE streams without any gzip framing.
115 Issue: COMPRESS-263.
116 Thanks to Matthias Stevens.
117
118Fixed Bugs:
119o When reading 7z files unknown file properties and properties of type
120 kDummy are now ignored.
121 Issue: COMPRESS-287.
122o Expanding 7z archives using LZMA compression could cause an
123 EOFException.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100124 Issue: COMPRESS-286.
Stefan Bodewigde633062014-10-09 12:00:48 +0000125o Long-Name and -link or PAX-header entries in TAR archives always had
126 the current time as last modfication time, creating archives that
127 are different at the byte level each time an archive was built.
128 Issue: COMPRESS-289.
129 Thanks to Bob Robertson.
130
131Changes:
132o Checking for XZ for Java may be expensive. The result will now be
133 cached outside of an OSGi environment. You can use the new
134 XZUtils#setCacheXZAvailability to overrride this default behavior.
135 Issue: COMPRESS-285.
136
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000137Release 1.8.1
Stefan Bodewigde633062014-10-09 12:00:48 +0000138-------------
Sebastian Bazley48882f12010-04-13 21:02:37 +0000139
Stefan Bodewig48d74702013-03-10 17:10:57 +0000140New features:
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000141o COMPRESS-272: CompressorStreamFactory can now auto-detect Unix compress
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100142 (".Z") streams.
Stefan Bodewig48d74702013-03-10 17:10:57 +0000143
Sebastian Bazley48882f12010-04-13 21:02:37 +0000144Fixed Bugs:
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000145o COMPRESS-270: The snappy, ar and tar inputstreams might fail to read from a
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100146 non-buffered stream in certain cases.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000147o COMPRESS-277: IOUtils#skip might skip fewer bytes than requested even though
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100148 more could be read from the stream.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000149o COMPRESS-276: ArchiveStreams now validate there is a current entry before
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100150 reading or writing entry data.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000151o ArjArchiveInputStream#canReadEntryData tested the current
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100152 entry of the stream rather than its argument.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000153o COMPRESS-274: ChangeSet#delete and deleteDir now properly deal with unnamed
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100154 entries.
155o COMPRESS-273: Added a few null checks to improve robustness.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000156o COMPRESS-278: TarArchiveInputStream failed to read archives with empty
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100157 gid/uid fields.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000158o COMPRESS-279: TarArchiveInputStream now again throws an exception when it
159 encounters a truncated archive while reading from the last
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100160 entry.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000161o COMPRESS-280: Adapted TarArchiveInputStream#skip to the modified
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100162 IOUtils#skip method. Thanks to BELUGA BEHR.
Stefan Bodewig48d74702013-03-10 17:10:57 +0000163
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000164Changes:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100165o The dependency on org.tukaani:xz is now marked as optional.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000166
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000167Release 1.8
168-----------
169
170New features:
171o GzipCompressorInputStream now provides access to the same
172 metadata that can be provided via GzipParameters when writing
173 a gzip stream.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100174 Issue: COMPRESS-260.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000175o SevenZOutputFile now supports chaining multiple
176 compression/encryption/filter methods and passing options to
177 the methods.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100178 Issue: COMPRESS-266.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000179o The (compression) method(s) can now be specified per entry in
180 SevenZOutputFile.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100181 Issue: COMPRESS-261.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000182o SevenZArchiveEntry "knows" which method(s) have been used to
183 write it to the archive.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100184 Issue: COMPRESS-258.
185o The 7z package now supports the delta filter as method.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000186o The 7z package now supports BCJ filters for several platforms.
187 You will need a version >= 1.5 of XZ for Java to read archives
188 using BCJ, though.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100189 Issue: COMPRESS-257.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000190
191Fixed Bugs:
192o BZip2CompressorInputStream read fewer bytes than possible from
193 a truncated stream.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100194 Issue: COMPRESS-253.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000195o SevenZFile failed claiming the dictionary was too large when
196 archives used LZMA compression for headers and content and
197 certain non-default dictionary sizes.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100198 Issue: COMPRESS-253.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000199o CompressorStreamFactory.createCompressorInputStream with
200 explicit compression did not honor decompressConcatenated
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100201 Issue: COMPRESS-259.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000202o TarArchiveInputStream will now read archives created by tar
203 implementations that encode big numbers by not adding a
204 trailing NUL.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100205 Issue: COMPRESS-262.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000206o ZipArchiveInputStream would return NUL bytes for the first 512
207 bytes of a STORED entry if it was the very first entry of the
208 archive.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100209 Issue: COMPRESS-264.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000210o When writing PAX/POSIX headers for TAR entries with
211 backslashes or certain non-ASCII characters in their name
212 TarArchiveOutputStream could fail.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100213 Issue: COMPRESS-265.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000214o ArchiveStreamFactory now throws a StreamingNotSupported - a
215 new subclass of ArchiveException - if it is asked to read from
216 or write to a stream and Commons Compress doesn't support
217 streaming for the format. This currently only applies to the
218 7z format.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100219 Issue: COMPRESS-267.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000220
221Release 1.7
222-----------
223
224New features:
225o Read-Only support for Snappy compression.
226 Issue: COMPRESS-147. Thanks to BELUGA BEHR.
227o Read-Only support for .Z compressed files.
228 Issue: COMPRESS-243. Thanks to Damjan Jovanovic.
229o ZipFile and ZipArchiveInputStream now support reading entries
230 compressed using the SHRINKING method. Thanks to Damjan Jovanovic.
231o GzipCompressorOutputStream now supports setting the compression
232 level and the header metadata (filename, comment, modification time,
233 operating system and extra flags)
234 Issue: COMPRESS-250. Thanks to Emmanuel Bourg.
235o ZipFile and ZipArchiveInputStream now support reading entries
236 compressed using the IMPLODE method.
237 Issue: COMPRESS-115. Thanks to Emmanuel Bourg.
238o ZipFile and the 7z file classes now implement Closeable and can be
239 used in try-with-resources constructs.
240
241Fixed Bugs:
242o SevenZOutputFile#closeArchiveEntry throws an exception when using
243 LZMA2 compression on Java8. Issue: COMPRESS-241.
244o 7z reading of big 64bit values could be wrong.
245 Issue: COMPRESS-244. Thanks to Nico Kruber.
246o TarArchiveInputStream could fail to read an archive completely.
247 Issue: COMPRESS-245.
248o The time-setters in X5455_ExtendedTimestamp now set the
249 corresponding flags explicitly - i.e. they set the bit if the valus
250 is not-null and reset it otherwise. This may cause
251 incompatibilities if you use setFlags to unset a bit and later set
252 the time to a non-null value - the flag will now be set.
253 Issue: COMPRESS-242.
254o SevenZOutputFile would create invalid archives if more than six
255 empty files or directories were included. Issue: COMPRESS-252.
256
257Release 1.6
258-----------
259
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100260Version 1.6 introduces changes to the internal API of the tar package that
261break backwards compatibility in the following rare cases. This version
262removes the package private TarBuffer class along with the protected "buffer"
263members in TarArchiveInputStream and TarArchiveOutputStream. This change will
264only affect you if you have created a subclass of one of the stream classes
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000265and accessed the buffer member or directly used the TarBuffer class.
266
267Changes in this version include:
268
269New features:
270o Added support for 7z archives. Most compression algorithms
271 can be read and written, LZMA and encryption are only
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100272 supported when reading. Issue: COMPRESS-54. Thanks to Damjan Jovanovic.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000273o Added read-only support for ARJ archives that don't use
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100274 compression. Issue: COMPRESS-226. Thanks to Damjan Jovanovic.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000275o DumpArchiveInputStream now supports an encoding parameter that
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100276 can be used to specify the encoding of file names.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000277o The CPIO streams now support an encoding parameter that can be
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100278 used to specify the encoding of file names.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000279o Read-only support for LZMA standalone compression has been added.
280 Issue: COMPRESS-111.
281
282Fixed Bugs:
283o TarBuffer.tryToConsumeSecondEOFRecord could throw a
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100284 NullPointerException Issue: COMPRESS-223. Thanks to Jeremy Gustie.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000285o Parsing of zip64 extra fields has become more lenient in order
286 to be able to read archives created by DotNetZip and maybe
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100287 other archivers as well. Issue: COMPRESS-228.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000288o TAR will now properly read the names of symbolic links with
289 long names that use the GNU variant to specify the long file
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100290 name. Issue: COMPRESS-229. Thanks to Christoph Gysin.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000291o ZipFile#getInputStream could return null if the archive
292 contained duplicate entries.
293 The class now also provides two new methods to obtain all
294 entries of a given name rather than just the first one.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100295 Issue: COMPRESS-227.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000296o CpioArchiveInputStream failed to read archives created by
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100297 Redline RPM. Issue: COMPRESS-236. Thanks to Andrew Duffy.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000298o TarArchiveOutputStream now properly handles link names that
299 are too long to fit into a traditional TAR header. Issue:
300 COMPRESS-237. Thanks to Emmanuel Bourg.
301o The auto-detecting create*InputStream methods of Archive and
302 CompressorStreamFactory could fail to detect the format of
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100303 blocking input streams. Issue: COMPRESS-239.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000304
305Changes:
306o Readabilty patch to TarArchiveInputStream. Issue:
307 COMPRESS-232. Thanks to BELUGA BEHR.
308o Performance improvements to TarArchiveInputStream, in
309 particular to the skip method. Issue: COMPRESS-234. Thanks to
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100310 BELUGA BEHR.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000311
312Release 1.5
313-----------
314
315New features:
316
317o CompressorStreamFactory has an option to create decompressing
318 streams that decompress the full input for formats that support
319 multiple concatenated streams.
320 Issue: COMPRESS-220.
321
322Fixed Bugs:
323
324o Typo in CompressorStreamFactory Javadoc
325 Issue: COMPRESS-218.
326 Thanks to Gili.
327o ArchiveStreamFactory's tar stream detection created false positives
328 for AIFF files.
329 Issue: COMPRESS-191.
330 Thanks to Jukka Zitting.
331o XZ for Java didn't provide an OSGi bundle. Compress' dependency on
332 it has now been marked optional so Compress itself can still be used
333 in an OSGi context.
334 Issue: COMPRESS-199.
335 Thanks to Jukka Zitting.
336o When specifying the encoding explicitly TarArchiveOutputStream would
337 write unreadable names in GNU mode or even cause errors in POSIX
338 mode for file names longer than 66 characters.
339 Issue: COMPRESS-200.
340 Thanks to Christian Schlichtherle.
341o Writing TAR PAX headers failed if the generated entry name ended
342 with a "/".
343 Issue: COMPRESS-203.
344o ZipArchiveInputStream sometimes failed to provide input to the
345 Inflater when it needed it, leading to reads returning 0.
346 Issue: COMPRESS-189.
347 Thanks to Daniel Lowe.
348o TarArchiveInputStream ignored the encoding for GNU long name
349 entries.
350 Issue: COMPRESS-212.
351o TarArchiveInputStream could leave the second EOF record inside the
352 stream it had just finished reading.
353 Issue: COMPRESS-206.
354 Thanks to Peter De Maeyer.
355o DumpArchiveInputStream no longer implicitly closes the original
356 input stream when it reaches the end of the archive.
357o ZipArchiveInputStream now consumes the remainder of the archive when
358 getNextZipEntry returns null.
359o Unit tests could fail if the source tree was checked out to a
360 directory tree containign spaces.
361 Issue: COMPRESS-205.
362 Thanks to Daniel Lowe.
363o Fixed a potential ArrayIndexOutOfBoundsException when reading STORED
364 entries from ZipArchiveInputStream.
365 Issue: COMPRESS-219.
366o CompressorStreamFactory can now be used without XZ for Java being
367 available.
368 Issue: COMPRESS-221.
369
370Changes:
371
372o Improved exception message if a zip archive cannot be read because
373 of an unsupported compression method.
374 Issue: COMPRESS-188.
375 Thanks to Harald Kuhn.
376o ArchiveStreamFactory has a setting for file name encoding that sets
377 up encoding for ZIP and TAR streams.
378 Issue: COMPRESS-192.
379 Thanks to Jukka Zitting.
380o TarArchiveEntry now has a method to verify its checksum.
381 Issue: COMPRESS-191.
382 Thanks to Jukka Zitting.
383o Split/spanned ZIP archives are now properly detected by
384 ArchiveStreamFactory but will cause an
385 UnsupportedZipFeatureException when read.
386o ZipArchiveInputStream now reads archives that start with a "PK00"
387 signature. Archives with this signatures are created when the
388 archiver was willing to split the archive but in the end only needed
389 a single segment - so didn't split anything.
390 Issue: COMPRESS-208.
391o TarArchiveEntry has a new constructor that allows setting linkFlag
392 and preserveLeadingSlashes at the same time.
393 Issue: COMPRESS-201.
394o ChangeSetPerformer has a new perform overload that uses a ZipFile
395 instance as input.
396 Issue: COMPRESS-159.
397o Garbage collection pressure has been reduced by reusing temporary
398 byte arrays in classes.
399 Issue: COMPRESS-172.
400 Thanks to Thomas Mair.
401o Can now handle zip extra field 0x5455 - Extended Timestamp.
402 Issue: COMPRESS-210.
403 Thanks to Julius Davies.
404o handle zip extra field 0x7875 - Info Zip New Unix Extra Field.
405 Issue: COMPRESS-211.
406 Thanks to Julius Davies.
407o ZipShort, ZipLong, ZipEightByteInteger should implement Serializable
408 Issue: COMPRESS-213.
409 Thanks to Julius Davies.
410o better support for unix symlinks in ZipFile entries.
411 Issue: COMPRESS-214.
412 Thanks to Julius Davies.
413o ZipFile's initialization has been improved for non-Zip64 archives.
414 Issue: COMPRESS-215.
415 Thanks to Robin Power.
416o Updated XZ for Java dependency to 1.2 as this version provides
417 proper OSGi manifest attributes.
418
419Release 1.4.1
420-------------
421
422This is a security bugfix release, see
423http://commons.apache.org/proper/commons-compress/security.html#Fixed_in_Apache_Commons_Compress_1.4.1
424
425Fixed Bugs:
426
427o Ported libbzip2's fallback sort algorithm to
428 BZip2CompressorOutputStream to speed up compression in certain
429 edge cases.
430
431Release 1.4
432-----------
433
434New features:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100435o COMPRESS-156: Support for the XZ format has been added.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000436
437Fixed Bugs:
438o COMPRESS-183: The tar package now allows the encoding of file names to be
439 specified and can optionally use PAX extension headers to
440 write non-ASCII file names.
441 The stream classes now write (or expect to read) archives that
442 use the platform's native encoding for file names. Apache
443 Commons Compress 1.3 used to strip everything but the lower
444 eight bits of each character which effectively only worked for
445 ASCII and ISO-8859-1 file names.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100446 This new default behavior is a breaking change.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000447o COMPRESS-184: TarArchiveInputStream failed to parse PAX headers that
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100448 contained non-ASCII characters.
449o COMPRESS-178: TarArchiveInputStream throws IllegalArgumentException instead of IOException
450o COMPRESS-179: TarUtils.formatLongOctalOrBinaryBytes() assumes the field will be 12 bytes long
451o COMPRESS-175: GNU Tar sometimes uses binary encoding for UID and GID
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000452o COMPRESS-171: ArchiveStreamFactory.createArchiveInputStream would claim
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100453 short text files were TAR archives.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000454o COMPRESS-164: ZipFile didn't work properly for archives using unicode extra
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100455 fields rather than UTF-8 filenames and the EFS-Flag.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000456o COMPRESS-169: For corrupt archives ZipFile would throw a RuntimeException in
457 some cases and an IOException in others. It will now
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100458 consistently throw an IOException.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000459
460Changes:
461o COMPRESS-182: The tar package can now write archives that use star/GNU/BSD
462 extensions or use the POSIX/PAX variant to store numeric
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100463 values that don't fit into the traditional header fields.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000464o COMPRESS-181: Added a workaround for a Bug some tar implementations that add
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100465 a NUL byte as first byte in numeric header fields.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000466o COMPRESS-176: Added a workaround for a Bug in WinZIP which uses backslashes
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100467 as path separators in Unicode Extra Fields.
468o COMPRESS-131: ArrayOutOfBounds while decompressing bz2. Added test case - code already seems to have been fixed.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000469o COMPRESS-146: BZip2CompressorInputStream now optionally supports reading of
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100470 concatenated .bz2 files.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000471o COMPRESS-154: GZipCompressorInputStream now optionally supports reading of
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100472 concatenated .gz files.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000473o COMPRESS-16: The tar package can now read archives that use star/GNU/BSD
474 extensions for files that are longer than 8 GByte as well as
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100475 archives that use the POSIX/PAX variant.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000476o COMPRESS-165: The tar package can now write archives that use star/GNU/BSD
477 extensions for files that are longer than 8 GByte as well as
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100478 archives that use the POSIX/PAX variant.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000479o COMPRESS-166: The tar package can now use the POSIX/PAX variant for writing
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100480 entries with names longer than 100 characters.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000481
482Release 1.3
483-----------
484
485Commons Compress 1.3 is the first version to require Java5 at runtime.
486
487Changes in this version include:
488
489New features:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100490o Support for the Pack200 format has been added. Issue: COMPRESS-142.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000491o Read-only support for the format used by the Unix dump(8) tool
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100492 has been added. Issue: COMPRESS-132.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000493
494Fixed Bugs:
495o BZip2CompressorInputStream's getBytesRead method always
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100496 returned 0.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000497o ZipArchiveInputStream and ZipArchiveOutputStream could leak
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100498 resources on some JDKs. Issue: COMPRESS-152.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000499o TarArchiveOutputStream's getBytesWritten method didn't count
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100500 correctly. Issue: COMPRESS-160.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000501
502Changes:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100503o The ZIP package now supports Zip64 extensions. Issue: COMPRESS-36.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000504o The AR package now supports the BSD dialect of storing file
505 names longer than 16 chars (both reading and writing).
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100506 Issue: COMPRESS-144.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000507
508Release 1.2
509-----------
510
511New features:
512o COMPRESS-123: ZipArchiveEntry has a new method getRawName that provides the
513 original bytes that made up the name. This may allow user
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100514 code to detect the encoding.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000515o COMPRESS-122: TarArchiveEntry provides access to the flags that determine
516 whether it is an archived symbolic link, pipe or other
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100517 "uncommon" file system object.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000518
519Fixed Bugs:
520o COMPRESS-129: ZipArchiveInputStream could fail with a "Truncated ZIP" error
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100521 message for entries between 2 GByte and 4 GByte in size.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000522o COMPRESS-145: TarArchiveInputStream now detects sparse entries using the
523 oldgnu format and properly reports it cannot extract their
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100524 contents.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000525o COMPRESS-130: The Javadoc for ZipArchiveInputStream#skip now matches the
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100526 implementation, the code has been made more defensive.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000527o COMPRESS-140: ArArchiveInputStream fails if entries contain only blanks for
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100528 userId or groupId. Thanks to Trejkaz.
529o COMPRESS-139: ZipFile may leak resources on some JDKs.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000530o COMPRESS-125: BZip2CompressorInputStream throws IOException if
531 underlying stream returns available() == 0.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100532 Removed the check.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000533o COMPRESS-127: Calling close() on inputStream returned by
534 CompressorStreamFactory.createCompressorInputStream()
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100535 does not close the underlying input stream.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000536o COMPRESS-119: TarArchiveOutputStream#finish now writes all buffered
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100537 data to the stream
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000538
539Changes:
540o ZipFile now implements finalize which closes the underlying
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100541 file.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000542o COMPRESS-117: Certain tar files not recognised by
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100543 ArchiveStreamFactory.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000544
545Release 1.1
546-----------
547
548New features:
549o COMPRESS-108: Command-line interface to list archive contents.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100550 Usage: java -jar commons-compress-n.m.jar archive-name [zip|tar|etc]
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000551o COMPRESS-109: Tar implementation does not support Pax headers
552 Added support for reading pax headers.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100553 Note: does not support global pax headers
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000554o COMPRESS-103: ZipArchiveInputStream can optionally extract data that used
555 the STORED compression method and a data descriptor.
556 Doing so in a stream is not safe in general, so you have to
557 explicitly enable the feature. By default the stream will
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100558 throw an exception if it encounters such an entry.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000559o COMPRESS-98: The ZIP classes will throw specialized exceptions if any
560 attempt is made to read or write data that uses zip features
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100561 not supported (yet).
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000562o COMPRESS-99: ZipFile#getEntries returns entries in a predictable order -
563 the order they appear inside the central directory.
564 A new method getEntriesInPhysicalOrder returns entries in
565 order of the entry data, i.e. the order ZipArchiveInputStream
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100566 would see.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000567o The Archive*Stream and ZipFile classes now have
568 can(Read|Write)EntryData methods that can be used to check
569 whether a given entry's data can be read/written.
570 The method currently returns false for ZIP archives if an
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100571 entry uses an unsupported compression method or encryption.
572o COMPRESS-89: The ZIP classes now detect encrypted entries.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000573o COMPRESS-97: Added autodetection of compression format to
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100574 CompressorStreamFactory.
575o COMPRESS-95: Improve ExceptionMessages in ArchiveStreamFactory Thanks to Joerg Bellmann.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000576o A new constructor of TarArchiveEntry can create entries with
577 names that start with slashes - the default is to strip
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100578 leading slashes in order to create relative path names.
579o ArchiveEntry now has a getLastModifiedDate method.
580o COMPRESS-78: Add a BZip2Utils class modelled after GZipUtils Thanks to Jukka Zitting.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000581
582Fixed Bugs:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100583o COMPRESS-72: Move acknowledgements from NOTICE to README
584o COMPRESS-113: TarArchiveEntry.parseTarHeader() includes the trailing space/NUL when parsing the octal size
585o COMPRESS-118: TarUtils.parseName does not properly handle characters outside the range 0-127
586o COMPRESS-107: ArchiveStreamFactory does not recognise tar files created by Ant
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000587o COMPRESS-110: Support "ustar" prefix field, which is used when file paths are longer
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100588 than 100 characters.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000589o COMPRESS-100: ZipArchiveInputStream will throw an exception if it detects an
590 entry that uses a data descriptor for a STORED entry since it
591 cannot reliably find the end of data for this "compression"
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100592 method.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000593o COMPRESS-101: ZipArchiveInputStream should now properly read archives that
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100594 use data descriptors but without the "unofficial" signature.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000595o COMPRESS-74: ZipArchiveInputStream failed to update the number of bytes
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100596 read properly.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000597o ArchiveInputStream has a new method getBytesRead that should
598 be preferred over getCount since the later may truncate the
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100599 number of bytes read for big archives.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000600o COMPRESS-85: The cpio archives created by CpioArchiveOutputStream couldn't
601 be read by many existing native implementations because the
602 archives contained multiple entries with the same inode/device
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100603 combinations and weren't padded to a blocksize of 512 bytes.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000604o COMPRESS-73: ZipArchiveEntry, ZipFile and ZipArchiveInputStream are now
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100605 more lenient when parsing extra fields.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000606o COMPRESS-82: cpio is terribly slow.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100607 Documented that buffered streams are needed for performance
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000608o Improved exception message if the extra field data in ZIP
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100609 archives cannot be parsed.
610o COMPRESS-17: Tar format unspecified - current support documented.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000611o COMPRESS-94: ZipArchiveEntry's equals method was broken for entries created
612 with the String-arg constructor. This lead to broken ZIP
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100613 archives if two different entries had the same hash code. Thanks to Anon Devs.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000614o COMPRESS-87: ZipArchiveInputStream could repeatedly return 0 on read() when
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100615 the archive was truncated. Thanks to Antoni Mylka.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000616o COMPRESS-86: Tar archive entries holding the file name for names longer
617 than 100 characters in GNU longfile mode didn't properly
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100618 specify they'd be using the "oldgnu" extension.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000619o COMPRESS-83: Delegate all read and write methods in GZip stream in order to
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100620 speed up operations.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000621o The ar and cpio streams now properly read and write last
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100622 modified times.
623o COMPRESS-81: TarOutputStream can leave garbage at the end of the archive
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000624
625Changes:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100626o COMPRESS-112: ArArchiveInputStream does not handle GNU extended filename records (//)
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000627o COMPRESS-105: Document that the name of an ZipArchiveEntry determines whether
628 an entry is considered a directory or not.
629 If you don't use the constructor with the File argument the entry's
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100630 name must end in a "/" in order for the entry to be known as a directory.
631o COMPRESS-79: Move DOS/Java time conversions into Zip utility class.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000632o COMPRESS-75: ZipArchiveInputStream does not show location in file
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100633 where a problem occurred.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000634