blob: c33ba7fcb7c0a3f4a3cdca32c92e5d06815403fa [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
Torsten Curdt68db5fa2016-01-15 15:35:17 +01008Release 1.11 (not yet released)
9------------
10
11Changes
12o TarArchiveEntry's preserveLeadingSlashes is now a property and used
13 on later calls to setName, too.
14 This behavior is a breaking change.
15 Issue: COMPRESS-328
16
Stefan Bodewigec075142015-01-26 05:12:09 +000017Release 1.10
18------------
19
20Release 1.10 moves the former
21org.apache.commons.compress.compressors.z._internal_ package which
22breaks backwards compatibility for code which used the old package.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000023
24This also changes the superclass of ZCompressorInputStream which makes
25this class binary incompatible with the one of Compress 1.9. Code
26that extends ZCompressorInputStream will need to be recompiled in
27order to work with Compress 1.10.
Stefan Bodewigc100d2e2015-01-30 08:24:54 +000028
Stefan Bodewigec075142015-01-26 05:12:09 +000029New features:
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000030o CompressorStreamFactory can now auto-detect DEFLATE streams
31 with ZLIB header.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010032 Issue: COMPRESS-316. Thanks to Nick Burch.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000033o CompressorStreamFactory can now auto-detect LZMA streams.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010034 Issue: COMPRESS-313.
Stefan Bodewigec075142015-01-26 05:12:09 +000035o Added support for parallel compression. This low-level API allows
36 a client to build a zip/jar file by using the class
37 org.apache.commons.compress.archivers.zip.ParallelScatterZipCreator.
38
39 Zip documentation updated with further notes about parallel features.
40
41 Please note that some aspects of jar creation need to be
42 handled by client code and is not part of commons-compress for this
43 release.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010044 Issue: COMPRESS-296. Thanks to Kristian Rosenvold.
Stefan Bodewigec075142015-01-26 05:12:09 +000045o Cut overall object instantiation in half by changing file
46 header generation algorithm, for a 10-15 percent performance
47 improvement.
48
49 Also extracted two private methods createLocalFileHeader
50 and createCentralFileHeader in ZipArchiveOutputStream.
51 These may have some interesting additional usages in the
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010052 near future. Thanks to Kristian Rosenvold.
Stefan Bodewigec075142015-01-26 05:12:09 +000053o New methods in ZipArchiveOutputStream and ZipFile allows
54 entries to be copied from one archive to another without
55 having to re-compress them.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010056 Issue: COMPRESS-295. Thanks to Kristian Rosenvold.
Stefan Bodewigec075142015-01-26 05:12:09 +000057
58Fixed Bugs:
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000059o TarArchiveInputStream can now read entries with group or
60 user ids > 0x80000000.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010061 Issue: COMPRESS-314.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000062o TarArchiveOutputStream can now write entries with group or
63 user ids > 0x80000000.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010064 Issue: COMPRESS-315.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000065o TarArchiveEntry's constructor with a File and a String arg
66 didn't normalize the name.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010067 Issue: COMPRESS-312.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000068o ZipEncodingHelper no longer reads system properties directly
69 to determine the default charset.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010070 Issue: COMPRESS-308.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000071o BZip2CompressorInputStream#read would return -1 when asked to
72 read 0 bytes.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010073 Issue: COMPRESS-309.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000074o ArchiveStreamFactory fails to pass on the encoding when creating
75 some streams.
76 * ArjArchiveInputStream
77 * CpioArchiveInputStream
78 * DumpArchiveInputStream
79 * JarArchiveInputStream
80 * TarArchiveInputStream
81 * JarArchiveOutputStream
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010082 Issue: COMPRESS-306.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000083o Restore immutability/thread-safety to ArchiveStreamFactory.
84 The class is now immutable provided that the method setEntryEncoding
85 is not used. The class is thread-safe.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010086 Issue: COMPRESS-302.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +000087o Restore immutability/thread-safety to CompressorStreamFactory.
88 The class is now immutable provided that the method
89 setDecompressConcatenated is not used. The class is thread-safe.
90 Issue: COMPRESS-303.
Stefan Bodewigec075142015-01-26 05:12:09 +000091o ZipFile logs a warning in its finalizer when its constructor
92 has thrown an exception reading the file - for example if the
93 file doesn't exist.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010094 Issue: COMPRESS-297.
Stefan Bodewigec075142015-01-26 05:12:09 +000095o Improved error message when tar encounters a groupId that is
96 too big to write without using the STAR or POSIX format.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +010097 Issue: COMPRESS-290. Thanks to Kristian Rosenvold.
Stefan Bodewigec075142015-01-26 05:12:09 +000098o SevenZFile now throws the specific PasswordRequiredException
99 when it encounters an encrypted stream but no password has
100 been specified.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100101 Issue: COMPRESS-298.
Stefan Bodewigec075142015-01-26 05:12:09 +0000102
103Changes:
104o Moved the package
105 org.apache.commons.compress.compressors.z._internal_ to
106 org.apache.commons.compress.compressors.lzw and made it part
107 of the API that is officially supported. This will break
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100108 existing code that uses the old package. Thanks to Damjan Jovanovic.
Stefan Bodewigec075142015-01-26 05:12:09 +0000109
110For complete information on Apache Commons Compress, including instructions
111on how to submit bug reports, patches, or suggestions for improvement,
112see the Apache Commons Compress website:
113
114http://commons.apache.org/compress/
115
116Old Release Notes
117=================
118
Stefan Bodewigde633062014-10-09 12:00:48 +0000119Release 1.9
120-----------
121
122New features:
123o Added support for DEFLATE streams without any gzip framing.
124 Issue: COMPRESS-263.
125 Thanks to Matthias Stevens.
126
127Fixed Bugs:
128o When reading 7z files unknown file properties and properties of type
129 kDummy are now ignored.
130 Issue: COMPRESS-287.
131o Expanding 7z archives using LZMA compression could cause an
132 EOFException.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100133 Issue: COMPRESS-286.
Stefan Bodewigde633062014-10-09 12:00:48 +0000134o Long-Name and -link or PAX-header entries in TAR archives always had
135 the current time as last modfication time, creating archives that
136 are different at the byte level each time an archive was built.
137 Issue: COMPRESS-289.
138 Thanks to Bob Robertson.
139
140Changes:
141o Checking for XZ for Java may be expensive. The result will now be
142 cached outside of an OSGi environment. You can use the new
143 XZUtils#setCacheXZAvailability to overrride this default behavior.
144 Issue: COMPRESS-285.
145
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000146Release 1.8.1
Stefan Bodewigde633062014-10-09 12:00:48 +0000147-------------
Sebastian Bazley48882f12010-04-13 21:02:37 +0000148
Stefan Bodewig48d74702013-03-10 17:10:57 +0000149New features:
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000150o COMPRESS-272: CompressorStreamFactory can now auto-detect Unix compress
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100151 (".Z") streams.
Stefan Bodewig48d74702013-03-10 17:10:57 +0000152
Sebastian Bazley48882f12010-04-13 21:02:37 +0000153Fixed Bugs:
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000154o COMPRESS-270: The snappy, ar and tar inputstreams might fail to read from a
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100155 non-buffered stream in certain cases.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000156o COMPRESS-277: IOUtils#skip might skip fewer bytes than requested even though
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100157 more could be read from the stream.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000158o COMPRESS-276: ArchiveStreams now validate there is a current entry before
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100159 reading or writing entry data.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000160o ArjArchiveInputStream#canReadEntryData tested the current
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100161 entry of the stream rather than its argument.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000162o COMPRESS-274: ChangeSet#delete and deleteDir now properly deal with unnamed
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100163 entries.
164o COMPRESS-273: Added a few null checks to improve robustness.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000165o COMPRESS-278: TarArchiveInputStream failed to read archives with empty
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100166 gid/uid fields.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000167o COMPRESS-279: TarArchiveInputStream now again throws an exception when it
168 encounters a truncated archive while reading from the last
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100169 entry.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000170o COMPRESS-280: Adapted TarArchiveInputStream#skip to the modified
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100171 IOUtils#skip method. Thanks to BELUGA BEHR.
Stefan Bodewig48d74702013-03-10 17:10:57 +0000172
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000173Changes:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100174o The dependency on org.tukaani:xz is now marked as optional.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000175
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000176Release 1.8
177-----------
178
179New features:
180o GzipCompressorInputStream now provides access to the same
181 metadata that can be provided via GzipParameters when writing
182 a gzip stream.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100183 Issue: COMPRESS-260.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000184o SevenZOutputFile now supports chaining multiple
185 compression/encryption/filter methods and passing options to
186 the methods.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100187 Issue: COMPRESS-266.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000188o The (compression) method(s) can now be specified per entry in
189 SevenZOutputFile.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100190 Issue: COMPRESS-261.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000191o SevenZArchiveEntry "knows" which method(s) have been used to
192 write it to the archive.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100193 Issue: COMPRESS-258.
194o The 7z package now supports the delta filter as method.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000195o The 7z package now supports BCJ filters for several platforms.
196 You will need a version >= 1.5 of XZ for Java to read archives
197 using BCJ, though.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100198 Issue: COMPRESS-257.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000199
200Fixed Bugs:
201o BZip2CompressorInputStream read fewer bytes than possible from
202 a truncated stream.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100203 Issue: COMPRESS-253.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000204o SevenZFile failed claiming the dictionary was too large when
205 archives used LZMA compression for headers and content and
206 certain non-default dictionary sizes.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100207 Issue: COMPRESS-253.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000208o CompressorStreamFactory.createCompressorInputStream with
209 explicit compression did not honor decompressConcatenated
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100210 Issue: COMPRESS-259.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000211o TarArchiveInputStream will now read archives created by tar
212 implementations that encode big numbers by not adding a
213 trailing NUL.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100214 Issue: COMPRESS-262.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000215o ZipArchiveInputStream would return NUL bytes for the first 512
216 bytes of a STORED entry if it was the very first entry of the
217 archive.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100218 Issue: COMPRESS-264.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000219o When writing PAX/POSIX headers for TAR entries with
220 backslashes or certain non-ASCII characters in their name
221 TarArchiveOutputStream could fail.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100222 Issue: COMPRESS-265.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000223o ArchiveStreamFactory now throws a StreamingNotSupported - a
224 new subclass of ArchiveException - if it is asked to read from
225 or write to a stream and Commons Compress doesn't support
226 streaming for the format. This currently only applies to the
227 7z format.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100228 Issue: COMPRESS-267.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000229
230Release 1.7
231-----------
232
233New features:
234o Read-Only support for Snappy compression.
235 Issue: COMPRESS-147. Thanks to BELUGA BEHR.
236o Read-Only support for .Z compressed files.
237 Issue: COMPRESS-243. Thanks to Damjan Jovanovic.
238o ZipFile and ZipArchiveInputStream now support reading entries
239 compressed using the SHRINKING method. Thanks to Damjan Jovanovic.
240o GzipCompressorOutputStream now supports setting the compression
241 level and the header metadata (filename, comment, modification time,
242 operating system and extra flags)
243 Issue: COMPRESS-250. Thanks to Emmanuel Bourg.
244o ZipFile and ZipArchiveInputStream now support reading entries
245 compressed using the IMPLODE method.
246 Issue: COMPRESS-115. Thanks to Emmanuel Bourg.
247o ZipFile and the 7z file classes now implement Closeable and can be
248 used in try-with-resources constructs.
249
250Fixed Bugs:
251o SevenZOutputFile#closeArchiveEntry throws an exception when using
252 LZMA2 compression on Java8. Issue: COMPRESS-241.
253o 7z reading of big 64bit values could be wrong.
254 Issue: COMPRESS-244. Thanks to Nico Kruber.
255o TarArchiveInputStream could fail to read an archive completely.
256 Issue: COMPRESS-245.
257o The time-setters in X5455_ExtendedTimestamp now set the
258 corresponding flags explicitly - i.e. they set the bit if the valus
259 is not-null and reset it otherwise. This may cause
260 incompatibilities if you use setFlags to unset a bit and later set
261 the time to a non-null value - the flag will now be set.
262 Issue: COMPRESS-242.
263o SevenZOutputFile would create invalid archives if more than six
264 empty files or directories were included. Issue: COMPRESS-252.
265
266Release 1.6
267-----------
268
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100269Version 1.6 introduces changes to the internal API of the tar package that
270break backwards compatibility in the following rare cases. This version
271removes the package private TarBuffer class along with the protected "buffer"
272members in TarArchiveInputStream and TarArchiveOutputStream. This change will
273only affect you if you have created a subclass of one of the stream classes
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000274and accessed the buffer member or directly used the TarBuffer class.
275
276Changes in this version include:
277
278New features:
279o Added support for 7z archives. Most compression algorithms
280 can be read and written, LZMA and encryption are only
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100281 supported when reading. Issue: COMPRESS-54. Thanks to Damjan Jovanovic.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000282o Added read-only support for ARJ archives that don't use
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100283 compression. Issue: COMPRESS-226. Thanks to Damjan Jovanovic.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000284o DumpArchiveInputStream now supports an encoding parameter that
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100285 can be used to specify the encoding of file names.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000286o The CPIO streams now support an encoding parameter that can be
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100287 used to specify the encoding of file names.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000288o Read-only support for LZMA standalone compression has been added.
289 Issue: COMPRESS-111.
290
291Fixed Bugs:
292o TarBuffer.tryToConsumeSecondEOFRecord could throw a
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100293 NullPointerException Issue: COMPRESS-223. Thanks to Jeremy Gustie.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000294o Parsing of zip64 extra fields has become more lenient in order
295 to be able to read archives created by DotNetZip and maybe
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100296 other archivers as well. Issue: COMPRESS-228.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000297o TAR will now properly read the names of symbolic links with
298 long names that use the GNU variant to specify the long file
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100299 name. Issue: COMPRESS-229. Thanks to Christoph Gysin.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000300o ZipFile#getInputStream could return null if the archive
301 contained duplicate entries.
302 The class now also provides two new methods to obtain all
303 entries of a given name rather than just the first one.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100304 Issue: COMPRESS-227.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000305o CpioArchiveInputStream failed to read archives created by
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100306 Redline RPM. Issue: COMPRESS-236. Thanks to Andrew Duffy.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000307o TarArchiveOutputStream now properly handles link names that
308 are too long to fit into a traditional TAR header. Issue:
309 COMPRESS-237. Thanks to Emmanuel Bourg.
310o The auto-detecting create*InputStream methods of Archive and
311 CompressorStreamFactory could fail to detect the format of
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100312 blocking input streams. Issue: COMPRESS-239.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000313
314Changes:
315o Readabilty patch to TarArchiveInputStream. Issue:
316 COMPRESS-232. Thanks to BELUGA BEHR.
317o Performance improvements to TarArchiveInputStream, in
318 particular to the skip method. Issue: COMPRESS-234. Thanks to
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100319 BELUGA BEHR.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000320
321Release 1.5
322-----------
323
324New features:
325
326o CompressorStreamFactory has an option to create decompressing
327 streams that decompress the full input for formats that support
328 multiple concatenated streams.
329 Issue: COMPRESS-220.
330
331Fixed Bugs:
332
333o Typo in CompressorStreamFactory Javadoc
334 Issue: COMPRESS-218.
335 Thanks to Gili.
336o ArchiveStreamFactory's tar stream detection created false positives
337 for AIFF files.
338 Issue: COMPRESS-191.
339 Thanks to Jukka Zitting.
340o XZ for Java didn't provide an OSGi bundle. Compress' dependency on
341 it has now been marked optional so Compress itself can still be used
342 in an OSGi context.
343 Issue: COMPRESS-199.
344 Thanks to Jukka Zitting.
345o When specifying the encoding explicitly TarArchiveOutputStream would
346 write unreadable names in GNU mode or even cause errors in POSIX
347 mode for file names longer than 66 characters.
348 Issue: COMPRESS-200.
349 Thanks to Christian Schlichtherle.
350o Writing TAR PAX headers failed if the generated entry name ended
351 with a "/".
352 Issue: COMPRESS-203.
353o ZipArchiveInputStream sometimes failed to provide input to the
354 Inflater when it needed it, leading to reads returning 0.
355 Issue: COMPRESS-189.
356 Thanks to Daniel Lowe.
357o TarArchiveInputStream ignored the encoding for GNU long name
358 entries.
359 Issue: COMPRESS-212.
360o TarArchiveInputStream could leave the second EOF record inside the
361 stream it had just finished reading.
362 Issue: COMPRESS-206.
363 Thanks to Peter De Maeyer.
364o DumpArchiveInputStream no longer implicitly closes the original
365 input stream when it reaches the end of the archive.
366o ZipArchiveInputStream now consumes the remainder of the archive when
367 getNextZipEntry returns null.
368o Unit tests could fail if the source tree was checked out to a
369 directory tree containign spaces.
370 Issue: COMPRESS-205.
371 Thanks to Daniel Lowe.
372o Fixed a potential ArrayIndexOutOfBoundsException when reading STORED
373 entries from ZipArchiveInputStream.
374 Issue: COMPRESS-219.
375o CompressorStreamFactory can now be used without XZ for Java being
376 available.
377 Issue: COMPRESS-221.
378
379Changes:
380
381o Improved exception message if a zip archive cannot be read because
382 of an unsupported compression method.
383 Issue: COMPRESS-188.
384 Thanks to Harald Kuhn.
385o ArchiveStreamFactory has a setting for file name encoding that sets
386 up encoding for ZIP and TAR streams.
387 Issue: COMPRESS-192.
388 Thanks to Jukka Zitting.
389o TarArchiveEntry now has a method to verify its checksum.
390 Issue: COMPRESS-191.
391 Thanks to Jukka Zitting.
392o Split/spanned ZIP archives are now properly detected by
393 ArchiveStreamFactory but will cause an
394 UnsupportedZipFeatureException when read.
395o ZipArchiveInputStream now reads archives that start with a "PK00"
396 signature. Archives with this signatures are created when the
397 archiver was willing to split the archive but in the end only needed
398 a single segment - so didn't split anything.
399 Issue: COMPRESS-208.
400o TarArchiveEntry has a new constructor that allows setting linkFlag
401 and preserveLeadingSlashes at the same time.
402 Issue: COMPRESS-201.
403o ChangeSetPerformer has a new perform overload that uses a ZipFile
404 instance as input.
405 Issue: COMPRESS-159.
406o Garbage collection pressure has been reduced by reusing temporary
407 byte arrays in classes.
408 Issue: COMPRESS-172.
409 Thanks to Thomas Mair.
410o Can now handle zip extra field 0x5455 - Extended Timestamp.
411 Issue: COMPRESS-210.
412 Thanks to Julius Davies.
413o handle zip extra field 0x7875 - Info Zip New Unix Extra Field.
414 Issue: COMPRESS-211.
415 Thanks to Julius Davies.
416o ZipShort, ZipLong, ZipEightByteInteger should implement Serializable
417 Issue: COMPRESS-213.
418 Thanks to Julius Davies.
419o better support for unix symlinks in ZipFile entries.
420 Issue: COMPRESS-214.
421 Thanks to Julius Davies.
422o ZipFile's initialization has been improved for non-Zip64 archives.
423 Issue: COMPRESS-215.
424 Thanks to Robin Power.
425o Updated XZ for Java dependency to 1.2 as this version provides
426 proper OSGi manifest attributes.
427
428Release 1.4.1
429-------------
430
431This is a security bugfix release, see
432http://commons.apache.org/proper/commons-compress/security.html#Fixed_in_Apache_Commons_Compress_1.4.1
433
434Fixed Bugs:
435
436o Ported libbzip2's fallback sort algorithm to
437 BZip2CompressorOutputStream to speed up compression in certain
438 edge cases.
439
440Release 1.4
441-----------
442
443New features:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100444o COMPRESS-156: Support for the XZ format has been added.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000445
446Fixed Bugs:
447o COMPRESS-183: The tar package now allows the encoding of file names to be
448 specified and can optionally use PAX extension headers to
449 write non-ASCII file names.
450 The stream classes now write (or expect to read) archives that
451 use the platform's native encoding for file names. Apache
452 Commons Compress 1.3 used to strip everything but the lower
453 eight bits of each character which effectively only worked for
454 ASCII and ISO-8859-1 file names.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100455 This new default behavior is a breaking change.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000456o COMPRESS-184: TarArchiveInputStream failed to parse PAX headers that
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100457 contained non-ASCII characters.
458o COMPRESS-178: TarArchiveInputStream throws IllegalArgumentException instead of IOException
459o COMPRESS-179: TarUtils.formatLongOctalOrBinaryBytes() assumes the field will be 12 bytes long
460o COMPRESS-175: GNU Tar sometimes uses binary encoding for UID and GID
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000461o COMPRESS-171: ArchiveStreamFactory.createArchiveInputStream would claim
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100462 short text files were TAR archives.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000463o COMPRESS-164: ZipFile didn't work properly for archives using unicode extra
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100464 fields rather than UTF-8 filenames and the EFS-Flag.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000465o COMPRESS-169: For corrupt archives ZipFile would throw a RuntimeException in
466 some cases and an IOException in others. It will now
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100467 consistently throw an IOException.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000468
469Changes:
470o COMPRESS-182: The tar package can now write archives that use star/GNU/BSD
471 extensions or use the POSIX/PAX variant to store numeric
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100472 values that don't fit into the traditional header fields.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000473o COMPRESS-181: Added a workaround for a Bug some tar implementations that add
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100474 a NUL byte as first byte in numeric header fields.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000475o COMPRESS-176: Added a workaround for a Bug in WinZIP which uses backslashes
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100476 as path separators in Unicode Extra Fields.
477o COMPRESS-131: ArrayOutOfBounds while decompressing bz2. Added test case - code already seems to have been fixed.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000478o COMPRESS-146: BZip2CompressorInputStream now optionally supports reading of
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100479 concatenated .bz2 files.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000480o COMPRESS-154: GZipCompressorInputStream now optionally supports reading of
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100481 concatenated .gz files.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000482o COMPRESS-16: The tar package can now read archives that use star/GNU/BSD
483 extensions for files that are longer than 8 GByte as well as
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100484 archives that use the POSIX/PAX variant.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000485o COMPRESS-165: The tar package can now write archives that use star/GNU/BSD
486 extensions for files that are longer than 8 GByte as well as
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100487 archives that use the POSIX/PAX variant.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000488o COMPRESS-166: The tar package can now use the POSIX/PAX variant for writing
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100489 entries with names longer than 100 characters.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000490
491Release 1.3
492-----------
493
494Commons Compress 1.3 is the first version to require Java5 at runtime.
495
496Changes in this version include:
497
498New features:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100499o Support for the Pack200 format has been added. Issue: COMPRESS-142.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000500o Read-only support for the format used by the Unix dump(8) tool
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100501 has been added. Issue: COMPRESS-132.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000502
503Fixed Bugs:
504o BZip2CompressorInputStream's getBytesRead method always
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100505 returned 0.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000506o ZipArchiveInputStream and ZipArchiveOutputStream could leak
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100507 resources on some JDKs. Issue: COMPRESS-152.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000508o TarArchiveOutputStream's getBytesWritten method didn't count
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100509 correctly. Issue: COMPRESS-160.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000510
511Changes:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100512o The ZIP package now supports Zip64 extensions. Issue: COMPRESS-36.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000513o The AR package now supports the BSD dialect of storing file
514 names longer than 16 chars (both reading and writing).
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100515 Issue: COMPRESS-144.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000516
517Release 1.2
518-----------
519
520New features:
521o COMPRESS-123: ZipArchiveEntry has a new method getRawName that provides the
522 original bytes that made up the name. This may allow user
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100523 code to detect the encoding.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000524o COMPRESS-122: TarArchiveEntry provides access to the flags that determine
525 whether it is an archived symbolic link, pipe or other
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100526 "uncommon" file system object.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000527
528Fixed Bugs:
529o COMPRESS-129: ZipArchiveInputStream could fail with a "Truncated ZIP" error
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100530 message for entries between 2 GByte and 4 GByte in size.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000531o COMPRESS-145: TarArchiveInputStream now detects sparse entries using the
532 oldgnu format and properly reports it cannot extract their
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100533 contents.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000534o COMPRESS-130: The Javadoc for ZipArchiveInputStream#skip now matches the
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100535 implementation, the code has been made more defensive.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000536o COMPRESS-140: ArArchiveInputStream fails if entries contain only blanks for
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100537 userId or groupId. Thanks to Trejkaz.
538o COMPRESS-139: ZipFile may leak resources on some JDKs.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000539o COMPRESS-125: BZip2CompressorInputStream throws IOException if
540 underlying stream returns available() == 0.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100541 Removed the check.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000542o COMPRESS-127: Calling close() on inputStream returned by
543 CompressorStreamFactory.createCompressorInputStream()
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100544 does not close the underlying input stream.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000545o COMPRESS-119: TarArchiveOutputStream#finish now writes all buffered
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100546 data to the stream
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000547
548Changes:
549o ZipFile now implements finalize which closes the underlying
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100550 file.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000551o COMPRESS-117: Certain tar files not recognised by
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100552 ArchiveStreamFactory.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000553
554Release 1.1
555-----------
556
557New features:
558o COMPRESS-108: Command-line interface to list archive contents.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100559 Usage: java -jar commons-compress-n.m.jar archive-name [zip|tar|etc]
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000560o COMPRESS-109: Tar implementation does not support Pax headers
561 Added support for reading pax headers.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100562 Note: does not support global pax headers
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000563o COMPRESS-103: ZipArchiveInputStream can optionally extract data that used
564 the STORED compression method and a data descriptor.
565 Doing so in a stream is not safe in general, so you have to
566 explicitly enable the feature. By default the stream will
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100567 throw an exception if it encounters such an entry.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000568o COMPRESS-98: The ZIP classes will throw specialized exceptions if any
569 attempt is made to read or write data that uses zip features
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100570 not supported (yet).
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000571o COMPRESS-99: ZipFile#getEntries returns entries in a predictable order -
572 the order they appear inside the central directory.
573 A new method getEntriesInPhysicalOrder returns entries in
574 order of the entry data, i.e. the order ZipArchiveInputStream
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100575 would see.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000576o The Archive*Stream and ZipFile classes now have
577 can(Read|Write)EntryData methods that can be used to check
578 whether a given entry's data can be read/written.
579 The method currently returns false for ZIP archives if an
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100580 entry uses an unsupported compression method or encryption.
581o COMPRESS-89: The ZIP classes now detect encrypted entries.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000582o COMPRESS-97: Added autodetection of compression format to
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100583 CompressorStreamFactory.
584o COMPRESS-95: Improve ExceptionMessages in ArchiveStreamFactory Thanks to Joerg Bellmann.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000585o A new constructor of TarArchiveEntry can create entries with
586 names that start with slashes - the default is to strip
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100587 leading slashes in order to create relative path names.
588o ArchiveEntry now has a getLastModifiedDate method.
589o COMPRESS-78: Add a BZip2Utils class modelled after GZipUtils Thanks to Jukka Zitting.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000590
591Fixed Bugs:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100592o COMPRESS-72: Move acknowledgements from NOTICE to README
593o COMPRESS-113: TarArchiveEntry.parseTarHeader() includes the trailing space/NUL when parsing the octal size
594o COMPRESS-118: TarUtils.parseName does not properly handle characters outside the range 0-127
595o COMPRESS-107: ArchiveStreamFactory does not recognise tar files created by Ant
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000596o COMPRESS-110: Support "ustar" prefix field, which is used when file paths are longer
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100597 than 100 characters.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000598o COMPRESS-100: ZipArchiveInputStream will throw an exception if it detects an
599 entry that uses a data descriptor for a STORED entry since it
600 cannot reliably find the end of data for this "compression"
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100601 method.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000602o COMPRESS-101: ZipArchiveInputStream should now properly read archives that
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100603 use data descriptors but without the "unofficial" signature.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000604o COMPRESS-74: ZipArchiveInputStream failed to update the number of bytes
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100605 read properly.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000606o ArchiveInputStream has a new method getBytesRead that should
607 be preferred over getCount since the later may truncate the
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100608 number of bytes read for big archives.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000609o COMPRESS-85: The cpio archives created by CpioArchiveOutputStream couldn't
610 be read by many existing native implementations because the
611 archives contained multiple entries with the same inode/device
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100612 combinations and weren't padded to a blocksize of 512 bytes.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000613o COMPRESS-73: ZipArchiveEntry, ZipFile and ZipArchiveInputStream are now
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100614 more lenient when parsing extra fields.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000615o COMPRESS-82: cpio is terribly slow.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100616 Documented that buffered streams are needed for performance
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000617o Improved exception message if the extra field data in ZIP
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100618 archives cannot be parsed.
619o COMPRESS-17: Tar format unspecified - current support documented.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000620o COMPRESS-94: ZipArchiveEntry's equals method was broken for entries created
621 with the String-arg constructor. This lead to broken ZIP
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100622 archives if two different entries had the same hash code. Thanks to Anon Devs.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000623o COMPRESS-87: ZipArchiveInputStream could repeatedly return 0 on read() when
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100624 the archive was truncated. Thanks to Antoni Mylka.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000625o COMPRESS-86: Tar archive entries holding the file name for names longer
626 than 100 characters in GNU longfile mode didn't properly
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100627 specify they'd be using the "oldgnu" extension.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000628o COMPRESS-83: Delegate all read and write methods in GZip stream in order to
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100629 speed up operations.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000630o The ar and cpio streams now properly read and write last
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100631 modified times.
632o COMPRESS-81: TarOutputStream can leave garbage at the end of the archive
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000633
634Changes:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100635o COMPRESS-112: ArArchiveInputStream does not handle GNU extended filename records (//)
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000636o COMPRESS-105: Document that the name of an ZipArchiveEntry determines whether
637 an entry is considered a directory or not.
638 If you don't use the constructor with the File argument the entry's
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100639 name must end in a "/" in order for the entry to be known as a directory.
640o COMPRESS-79: Move DOS/Java time conversions into Zip utility class.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000641o COMPRESS-75: ZipArchiveInputStream does not show location in file
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100642 where a problem occurred.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000643