blob: b40901f06d0959ed358a36a61b9edc7745f50516 [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 Bodewig2e44bbe2018-02-02 18:27:50 +01005lzma, xz, Snappy, traditional Unix Compress, DEFLATE, DEFLATE64, LZ4,
6Brotli, Zstandard and ar, cpio, jar, tar, zip, dump, 7z, arj.
7
Stefan Bodewig7e827522018-08-13 08:56:24 +02008Release 1.18
9------------
10
11New features:
12o It is now possible to specify the arguments of zstd-jni's
13 ZstdOutputStream constructors via Commons Compress as well.
14 Issue: COMPRESS-460.
15 Thanks to Carmi Grushko.
16
17Fixed Bugs:
18o The example Expander class has been vulnerable to a path
19 traversal in the edge case that happens when the target
20 directory has a sibling directory and the name of the target
21 directory is a prefix of the sibling directory's name.
22 Thanks to Didier Loiseau.
23o Changed the OSGi Import-Package to also optionally import
24 javax.crypto so encrypted archives can be read.
25 Issue: COMPRESS-456.
26o Changed various implementations of the close method to better
27 ensure all held resources get closed even if exceptions are
28 thrown during the closing the stream.
29 Issue: COMPRESS-457.
30o ZipArchiveInputStream can now detect the APK Signing Block
31 used in signed Android APK files and treats it as an "end of
32 archive" marker.
33 Issue: COMPRESS-455.
34o The cpio streams didn't handle archives using a multi-byte
35 encoding properly.
36 Issue: COMPRESS-459.
37 Thanks to Jens Reimann.
38o ZipArchiveInputStream#read would silently return -1 on a
39 corrupted stored entry and even return > 0 after hitting the
40 end of the archive.
41 Issue: COMPRESS-463.
42o ArArchiveInputStream#read would allow to read from the stream
43 without opening an entry at all.
44 Issue: COMPRESS-462.
45
Stefan Bodewigb9701d52018-05-30 18:47:50 +020046Release 1.17
47------------
48
49New features:
50o Added a unit test that is supposed to fail if we break the
51 OSGi manifest entries again.
52 Issue: COMPRESS-443.
Stefan Bodewig83900472018-05-31 17:47:25 +020053o Add a new SkipShieldingInputStream class that can be used with
54 streams that throw an IOException when skip is invoked.
Stefan Bodewigb9701d52018-05-30 18:47:50 +020055 Issue: COMPRESS-449.
56o New constructors have been added to SevenZFile that accept
57 char[]s rather than byte[]s in order to avoid a common error
58 of using the wrong encoding when creating the byte[]. This
59 change may break source compatibility for client code that
60 uses one of the constructors expecting a password and passes
61 in null as password. We recommend to change the code to use a
62 constructor without password argument.
63 Issue: COMPRESS-452.
64
65Fixed Bugs:
66o Removed the objenesis dependency from the pom as it is not
67 needed at all.
68o Fixed resource leak in ParallelScatterZipCreator#writeTo.
69 Issue: COMPRESS-446.
70o Certain errors when parsing ZIP extra fields in corrupt
71 archives are now turned into ZipException, they used to
72 manifest as ArrayIndexOutOfBoundsException before.
73 Issue: COMPRESS-447.
74o IOUtils.copy now verifies the buffer size is bigger than 0.
75 Issue: COMPRESS-451.
76o ZipArchiveInputStream failed to read some files with stored
77 entries using a data descriptor.
78 Issue: COMPRESS-454.
79
80Changes:
81o Fixed some code examples.
82 Github Pull Request #63.
83 Thanks to Marchenko Sergey.
84o The streams returned by ZipFile and most other decompressing
85 streams now provide information about the number of compressed
86 and uncompressed bytes read so far. This may be used to detect
87 a ZipBomb if the compression ratio exceeds a certain
88 threshold, for example.
89 For SevenZFile a new method returns the statistics for the
90 current entry.
91 Issue: COMPRESS-445.
92 Thanks to Andreas Beeker.
93o Added a workaround for a bug in AdoptOpenJDK for S/390 to
94 BZip2CompressorInputStream.
95 Issue: COMPRESS-453.
96
Stefan Bodewigb5204112018-02-07 07:32:46 +010097Release 1.16.1
98--------------
99
Stefan Bodewig67c2f682018-02-10 09:44:34 +0100100Fixed Bug:
Stefan Bodewigb5204112018-02-07 07:32:46 +0100101o Fixed the OSGi manifest entry for imports that has been broken
102 in 1.16.
103 Issue: COMPRESS-442.
104
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100105Release 1.16
106------------
107
108New features:
109o Add read-only support for Zstandard compression based on the
110 Zstd-jni project.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200111 Issue: COMPRESS-423. Thanks to Andre F de Miranda.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100112o Added auto-detection for Zstandard compressed streams.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200113 Issue: COMPRESS-425.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100114o Added write-support for Zstandard compression.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200115 Issue: COMPRESS-426.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100116o Added read-only DEFLATE64 support to ZIP archives and as
117 stand-alone CompressorInputStream.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200118 Issue: COMPRESS-380. Thanks to Christian Marquez Grabia.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100119o Added read-only DEFLATE64 support to 7z archives.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200120 Issue: COMPRESS-437.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100121
122Fixed Bugs:
123o Synchronized iteration over a synchronizedList in
124 ParallelScatterZipCreator.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200125 Issue: COMPRESS-430. Thanks to Bruno P. Kinoshita.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100126o ZipFile could get stuck in an infinite loop when parsing ZIP
127 archives with certain strong encryption headers.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200128 Issue: COMPRESS-432.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100129o Added improved checks to detect corrupted bzip2 streams and
130 throw the expected IOException rather than obscure
131 RuntimeExceptions.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200132 Issue: COMPRESS-424.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100133
134Changes:
135o Replaces instanceof checks with a type marker in LZ77 support code.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200136 Issue: COMPRESS-435. Thanks to BELUGA BEHR.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100137o Updated XZ for Java dependency to 1.8 in order to pick up bug fix
Stefan Bodewig2683e562018-05-30 18:47:59 +0200138 to LZMA2InputStream's available method.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100139o ZipArchiveEntry now exposes how the name or comment have been
140 determined when the entry was read.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200141 Issue: COMPRESS-429. Thanks to Damiano Albani.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100142o ZipFile.getInputStream will now always buffer the stream
143 internally in order to improve read performance.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200144 Issue: COMPRESS-438.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100145o Speed improvement for DEFLATE64 decompression.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200146 Issue: COMPRESS-440. Thanks to Dawid Weiss.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100147o Added a few extra sanity checks for the rarer compression
148 methods used in ZIP archives.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200149 Issue: COMPRESS-436.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100150o Simplified the special handling for the dummy byte required by
151 zlib when using java.util.zip.Inflater.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200152 Issue: COMPRESS-441.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100153o Various code cleanups.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200154 Github Pull Request #61. Thanks to Shahab Kondri.
Stefan Bodewig2e44bbe2018-02-02 18:27:50 +0100155o TarArchiveEntry's preserveLeadingSlashes constructor argument
156 has been renamed and can now also be used to preserve the
Stefan Bodewig2683e562018-05-30 18:47:59 +0200157 drive letter on Windows.
Stefan Bodewigde633062014-10-09 12:00:48 +0000158
Stefan Bodewigc348be12017-10-09 18:18:41 +0200159Release 1.15
160------------
161
162New features:
163o Added magic MANIFEST entry Automatic-Module-Name so the module
164 name will be org.apache.commons.compress when the jar is used
165 as an automatic module in Java9.
166 Issue: COMPRESS-397.
167o Added a new utility class FixedLengthBlockOutputStream that
168 can be used to ensure writing always happens in blocks of a
169 given size.
170 Issue: COMPRESS-405. Thanks to Simon Spero.
171o It is now possible to specify/read custom PAX headers when
172 writing/reading tar archives.
173 Issue: COMPRESS-400. Thanks to Simon Spero.
174
175Fixed Bugs:
176o Make sure "version needed to extract" in local file header and
177 central directory of a ZIP archive agree with each other.
178 Also ensure the version is set to 2.0 if DEFLATE is used.
179 Issue: COMPRESS-394.
180o Don't use a data descriptor in ZIP archives when copying a raw
181 entry that already knows its size and CRC information.
182 Issue: COMPRESS-395.
183o Travis build redundantly repeats compilation and tests redundantly
184 GitHub Pull Request #43. Thanks to Simon Spero.
185 Issue: COMPRESS-413
186o The MANIFEST of 1.14 lacks an OSGi Import-Package for XZ for
187 Java.
188 Issue: COMPRESS-396.
189o BUILDING.md now passes the RAT check.
190 Issue: COMPRESS-406. Thanks to Simon Spero.
191o Made sure ChecksumCalculatingInputStream receives valid
192 checksum and input stream instances via the constructor.
193 Issue: COMPRESS-412. Thanks to Michael Hausegger.
194o TarArchiveOutputStream now verifies the block and record sizes
195 specified at construction time are compatible with the tar
196 specification. In particular 512 is the only record size
197 accepted and the block size must be a multiple of 512.
198 Issue: COMPRESS-407. Thanks to Simon Spero.
199o Fixed class names of CpioArchiveEntry and
200 CpioArchiveInputStream in various Javadocs.
201 Issue: COMPRESS-415.
202o The code of the extended timestamp zip extra field incorrectly
203 assumed the time was stored as unsigned 32-bit int and thus
204 created incorrect results for years after 2037.
205 Issue: COMPRESS-416. Thanks to Simon Spero.
206o Removed ZipEncoding code that became obsolete when we started
207 to require Java 5 as baseline long ago.
208 Issue: COMPRESS-410. Thanks to Simon Spero.
209o The tar package will no longer try to parse the major and
210 minor device numbers unless the entry represents a character
211 or block special file.
212 Issue: COMPRESS-417.
213o When reading tar headers with name fields containing embedded
214 NULs, the name will now be terminated at the first NUL byte.
215 Issue: COMPRESS-421. Thanks to Roel Spilker.
216o Simplified TarArchiveOutputStream by replacing the internal
217 buffering with new class FixedLengthBlockOutputStream.
218 Issue: COMPRESS-409.
219
Stefan Bodewigdd7c7702017-05-11 21:03:58 +0200220Release 1.14
221------------
222
223New features:
224o Added write support for Snappy.
225 Issue: COMPRESS-246.
226o Added support for LZ4 (block and frame format).
227 Issue: COMPRESS-271.
228o Add static detect(InputStream in) to CompressorStreamFactory
229 and ArchiveStreamFactory
230 Issue: COMPRESS-385.
231o Added a way to limit amount of memory ZCompressorStream may
232 use.
233 Issue: COMPRESS-382. Thanks to Tim Allison.
234o Added a way to limit amount of memory ZCompressorStream may
235 use.
236 Issue: COMPRESS-386. Thanks to Tim Allison.
237o Added a way to limit amount of memory LZMACompressorStream and
238 XZCompressorInputStream may use.
239 Issue: COMPRESS-382. Thanks to Tim Allison.
240o Add Brotli decoder based on the Google Brotli library.
241 Issue: COMPRESS-392. Thanks to Philippe Mouawad.
242o ZipEntry now exposes its data offset.
243 Issue: COMPRESS-390. Thanks to Zbynek Vyskovsky.
244o Using ZipArchiveEntry's setAlignment it is now possible to
245 ensure the data offset of an entry starts at a file position
246 that at word or page boundaries.
247 A new extra field has been added for this purpose.
248 Issue: COMPRESS-391. Thanks to Zbynek Vyskovsky.
249
250Fixed Bugs:
251o SnappyCompressorInputStream slides the window too early
252 leading to ArrayIndexOutOfBoundsExceptions for some streams.
253 Issue: COMPRESS-378.
254o ZipArchiveEntry#isUnixSymlink now only returns true if the
255 corresponding link flag is the only file-type flag set.
256 Issue: COMPRESS-379. Thanks to Guillaume Boué.
257o Fixed an integer overflow in CPIO's CRC calculation.
258 Pull Request #17. Thanks to Daniel Collin.
259o Make unit tests work on Windows paths with spaces in their names.
260 Issue: COMPRESS-387.
261o Internal location pointer in ZipFile could get incremented
262 even if nothing had been read.
263 Issue: COMPRESS-389.
264o LZMACompressorOutputStream#flush would throw an exception
265 rather than be the NOP it promised to be.
266 Issue: COMPRESS-393.
267
268Changes:
269o The blocksize for FramedSnappyCompressorInputStream can now be
270 configured as some IWA files seem to be using blocks larger
271 than the default 32k.
272 Issue: COMPRESS-358.
273o BZip2CompressorInputstream now uses BitInputStream internally.
274 Pull Request #13. Thanks to Thomas Meyer.
275o Improved performance for concurrent reads from ZipFile when
276 reading from a file.
277 Issue: COMPRESS-388. Thanks to Zbynek Vyskovsky.
278
Stefan Bodewigb9acd7c2016-12-25 13:02:22 +0100279Release 1.13
280------------
281
Stefan Bodewig45438472016-12-25 13:16:42 +0100282Commons Compress 1.13 is the first version to require Java 7 at
Stefan Bodewigb9acd7c2016-12-25 13:02:22 +0100283runtime.
284
285Changes in this version include:
286
287New features:
288o SevenZFile, SevenZOutputFile, ZipFile and
289 ZipArchiveOutputStream can now work on non-file resources if
290 they can be accessed via SeekableByteChannel.
291 Issue: COMPRESS-327.
292o Allow compressor extensions through a standard JRE ServiceLoader.
293 Issue: COMPRESS-368.
294o Allow archive extensions through a standard JRE ServiceLoader.
295 Issue: COMPRESS-369.
296o Add write support for the legacy LZMA format, this requires XZ
297 for Java 1.6.
298 Issue: COMPRESS-373.
299o Add write support for the legacy LZMA stream to 7z, this
300 requires XZ for Java 1.6.
301 Issue: COMPRESS-374.
302o Allow the clients of ParallelScatterZipCreator to provide
303 ZipArchiveEntryRequestSupplier.
304 Issue: COMPRESS-375. Thanks to Plamen Totev.
305o Add a version-independent link to the API docs of the latest
306 release.
307 Issue: COMPRESS-372.
308
309Fixed Bugs:
310o BitInputStream could return bad results when overflowing
311 internally - if two consecutive reads tried to read more than
312 64 bits.
313 Issue: COMPRESS-363.
314o ZipArchiveInputStream.closeEntry does not properly advance to
315 next entry if there are junk bytes at end of data section.
316 Issue: COMPRESS-364. Thanks to Mike Mole.
317o ZipArchiveInputStream now throws an Exception if it encounters
318 a broken ZIP archive rather than signaling end-of-archive.
319 Issue: COMPRESS-367. Thanks to Mike Mole.
320o ScatterZipOutputStream didn't close the StreamCompressor
321 causing a potential resource leak.
322 Issue: COMPRESS-377.
323
324Changes:
325o Update Java requirement from 6 to 7.
326 Issue: COMPRESS-360.
327o Clarified which TarArchiveEntry methods are useless for
328 entries read from an archive.
329 Issue: COMPRESS-366.
330
Stefan Bodewig3623ee72016-06-18 17:25:37 +0200331Release 1.12
Stefan Bodewig4c11f122016-06-18 17:17:37 +0200332------------
333
Stefan Bodewig9a677fb2016-06-21 21:27:57 +0200334Commons Compress 1.12 is the first version to require Java 6 at
Stefan Bodewig4c11f122016-06-18 17:17:37 +0200335runtime.
336
337Release 1.12 changes the behavior of BZip2CompressorOutputStream's
338finalize method so that it no longer invokes finish. This is going to
339break code that relied on the finalizer to clean up an unfinished
340stream. The code will need to be changed to call finish or close
341itself. Note that a finalizer is not guaranteed to run, so the feature
342was not 100% effective in any case.
343
344New features:
345
346o FramedSnappyCompressorInputStream now supports the dialect of
347 Snappy used by the IWA files contained within the zip archives
348 used in Apple's iWork 13 files.
349 Issue: COMPRESS-352.
350
351Fixed Bugs:
352
353o SevenZFile.read() throws an IllegalStateException for empty entries.
354 Issue: COMPRESS-348.
355o TarArchiveInputStream failed to parse PAX headers that included
356 blank lines.
357 Issue: COMPRESS-355. Thanks to Jeremy Gustie.
358o TarArchiveInputStream failed to parse PAX headers whose tar entry
359 name ended with a slash.
360 Issue: COMPRESS-356. Thanks to Jeremy Gustie.
361
362Changes:
363o Update requirement from Java 5 to 6.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200364 Issue: COMPRESS-349.
Stefan Bodewig4c11f122016-06-18 17:17:37 +0200365o TarArchiveEntry wastefully allocates empty arrays.
Stefan Bodewig2683e562018-05-30 18:47:59 +0200366 Issue: COMPRESS-350.
Stefan Bodewig4c11f122016-06-18 17:17:37 +0200367o Javadoc for BZip2CompressorInputStream(InputStream, boolean) should
368 refer to IOEx, not NPE.
369 Issue: COMPRESS-353.
370o PureJavaCrc32C in the snappy package is now final so it is now safe
371 to call a virtual method inside the constructor.
372 Issue: COMPRESS-354.
373
374o ZipArchiveInputStream and CpioArchiveInputStream could throw
375 exceptions who's messages contained potentially corrupt entry names
376 read from a broken archive. They will now sanitize the names by
377 replacing unprintable characters and restricting the length to 255
378 characters.
379 Issue: COMPRESS-351.
380o BZip2CompressorOutputStream no longer tries to finish the output
381 stream in finalize. This is a breaking change for code that relied
382 on the finalizer.
383 Issue: COMPRESS-357.
384
385
Stefan Bodewigff38bf52016-03-30 15:12:33 +0200386Release 1.11
Torsten Curdt68db5fa2016-01-15 15:35:17 +0100387------------
388
Stefan Bodewigff38bf52016-03-30 15:12:33 +0200389New features:
390o TarArchiveInputStream now supports reading global PAX headers.
391 Issue: COMPRESS-347.
392o The PAX headers for sparse entries written by star are now
393 applied.
394 Issue: COMPRESS-346.
395o GNU sparse files using one of the PAX formats are now
396 detected, but cannot be extracted.
397 Issue: COMPRESS-345.
398o New method SevenZFile.getEntries can be used to list the
399 contents of a 7z archive.
400 Issue: COMPRESS-341.
401o When using Zip64Mode.Always also use ZIP64 extensions inside
402 the central directory.
403 GitHub Pull Request #10 Thanks to Matt Hovey.
404o ZipFile.getRawInputStream() is now part of the public API
405 Issue: COMPRESS-323.
406o Allow byte-for-byte replication of Zip entries.
407 GitHub Pull Request #6. Thanks to Jason van Zyl.
Torsten Curdt68db5fa2016-01-15 15:35:17 +0100408o TarArchiveEntry's preserveLeadingSlashes is now a property and used
409 on later calls to setName, too.
410 This behavior is a breaking change.
Stefan Bodewigff38bf52016-03-30 15:12:33 +0200411 Issue: COMPRESS-328.
412o Added read-only support for bzip2 compression used inside of
413 ZIP archives.
414 GitHub Pull Request #4. Thanks to Sören Glimm.
415
416Fixed Bugs:
417o ArArchiveInputStream can now read GNU extended names that are
418 terminated with a NUL byte rather than a linefeed.
419 Issue: COMPRESS-344.
420o Native Memory Leak in Sevenz-DeflateDecoder.
421 Issue: COMPRESS-343. Thanks to Rene Preissel.
422o SevenZFile will now only try to drain an entry's content when
423 moving on to the next entry if data is read from the next
424 entry. This should improve performance for applications that
425 try to skip over entries.
426 Issue: COMPRESS-340. Thanks to Dawid Weiss.
427o file names of tar archives using the xstar format are now
428 parsed properly.
429 Issue: COMPRESS-336.
430o checksums of tars that pad the checksum field to the left are
431 now calculated properly.
432 Issue: COMPRESS-335.
433o ArArchiveInputStream failed to read past the first entry when
434 BSD long names have been used.
435 Issue: COMPRESS-334. Thanks to Jeremy Gustie.
436o Added buffering for random access which speeds up 7Z support.
437 Issue: COMPRESS-333. Thanks to Dawid Weiss.
438o The checksum validation of TararchiveEntry is now as strict as
439 the validation of GNU tar, which eliminates a few cases of
440 false positives of ArchiveStreamFactory.
441 This behavior is a breaking change since the check has become
442 more strict but any archive that fails the checksum test now
443 would also fail it when extracted with other tools and must be
444 considered an invalid archive.
445 Issue: COMPRESS-331.
446o SnappyCompressorInputStream and
447 FramedSnappyCompressorInputStream returned 0 at the end of the
448 stream under certain circumstances.
449 Issue: COMPRESS-332.
450o Adjusted unit test to updates in Java8 and later that change
451 the logic of ZipEntry#getTime.
452 Issue: COMPRESS-326.
453o TarArchiveOutputStream will now recognize GNU long name and
454 link entries even if the special entry has a different name
455 than GNU tar uses itself. This seems to be the case for
456 archives created by star.
457 Issue: COMPRESS-324.
458o ArrayIndexOutOfBoundsException when InfoZIP type 7875 extra
459 fields are read from the central directory.
460 Issue: COMPRESS-321.
Torsten Curdt68db5fa2016-01-15 15:35:17 +0100461
Stefan Bodewigec075142015-01-26 05:12:09 +0000462Release 1.10
463------------
464
465Release 1.10 moves the former
466org.apache.commons.compress.compressors.z._internal_ package which
467breaks backwards compatibility for code which used the old package.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +0000468
469This also changes the superclass of ZCompressorInputStream which makes
470this class binary incompatible with the one of Compress 1.9. Code
471that extends ZCompressorInputStream will need to be recompiled in
472order to work with Compress 1.10.
Stefan Bodewigc100d2e2015-01-30 08:24:54 +0000473
Stefan Bodewigec075142015-01-26 05:12:09 +0000474New features:
Stefan Bodewigb1e2a022015-08-18 17:49:15 +0000475o CompressorStreamFactory can now auto-detect DEFLATE streams
476 with ZLIB header.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100477 Issue: COMPRESS-316. Thanks to Nick Burch.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +0000478o CompressorStreamFactory can now auto-detect LZMA streams.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100479 Issue: COMPRESS-313.
Stefan Bodewigec075142015-01-26 05:12:09 +0000480o Added support for parallel compression. This low-level API allows
481 a client to build a zip/jar file by using the class
482 org.apache.commons.compress.archivers.zip.ParallelScatterZipCreator.
483
484 Zip documentation updated with further notes about parallel features.
485
486 Please note that some aspects of jar creation need to be
487 handled by client code and is not part of commons-compress for this
488 release.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100489 Issue: COMPRESS-296. Thanks to Kristian Rosenvold.
Stefan Bodewigec075142015-01-26 05:12:09 +0000490o Cut overall object instantiation in half by changing file
491 header generation algorithm, for a 10-15 percent performance
492 improvement.
493
494 Also extracted two private methods createLocalFileHeader
495 and createCentralFileHeader in ZipArchiveOutputStream.
496 These may have some interesting additional usages in the
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100497 near future. Thanks to Kristian Rosenvold.
Stefan Bodewigec075142015-01-26 05:12:09 +0000498o New methods in ZipArchiveOutputStream and ZipFile allows
499 entries to be copied from one archive to another without
500 having to re-compress them.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100501 Issue: COMPRESS-295. Thanks to Kristian Rosenvold.
Stefan Bodewigec075142015-01-26 05:12:09 +0000502
503Fixed Bugs:
Stefan Bodewigb1e2a022015-08-18 17:49:15 +0000504o TarArchiveInputStream can now read entries with group or
505 user ids > 0x80000000.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100506 Issue: COMPRESS-314.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +0000507o TarArchiveOutputStream can now write entries with group or
508 user ids > 0x80000000.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100509 Issue: COMPRESS-315.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +0000510o TarArchiveEntry's constructor with a File and a String arg
511 didn't normalize the name.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100512 Issue: COMPRESS-312.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +0000513o ZipEncodingHelper no longer reads system properties directly
514 to determine the default charset.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100515 Issue: COMPRESS-308.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +0000516o BZip2CompressorInputStream#read would return -1 when asked to
517 read 0 bytes.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100518 Issue: COMPRESS-309.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +0000519o ArchiveStreamFactory fails to pass on the encoding when creating
520 some streams.
521 * ArjArchiveInputStream
522 * CpioArchiveInputStream
523 * DumpArchiveInputStream
524 * JarArchiveInputStream
525 * TarArchiveInputStream
526 * JarArchiveOutputStream
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100527 Issue: COMPRESS-306.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +0000528o Restore immutability/thread-safety to ArchiveStreamFactory.
529 The class is now immutable provided that the method setEntryEncoding
530 is not used. The class is thread-safe.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100531 Issue: COMPRESS-302.
Stefan Bodewigb1e2a022015-08-18 17:49:15 +0000532o Restore immutability/thread-safety to CompressorStreamFactory.
533 The class is now immutable provided that the method
534 setDecompressConcatenated is not used. The class is thread-safe.
535 Issue: COMPRESS-303.
Stefan Bodewigec075142015-01-26 05:12:09 +0000536o ZipFile logs a warning in its finalizer when its constructor
537 has thrown an exception reading the file - for example if the
538 file doesn't exist.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100539 Issue: COMPRESS-297.
Stefan Bodewigec075142015-01-26 05:12:09 +0000540o Improved error message when tar encounters a groupId that is
541 too big to write without using the STAR or POSIX format.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100542 Issue: COMPRESS-290. Thanks to Kristian Rosenvold.
Stefan Bodewigec075142015-01-26 05:12:09 +0000543o SevenZFile now throws the specific PasswordRequiredException
544 when it encounters an encrypted stream but no password has
545 been specified.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100546 Issue: COMPRESS-298.
Stefan Bodewigec075142015-01-26 05:12:09 +0000547
548Changes:
549o Moved the package
550 org.apache.commons.compress.compressors.z._internal_ to
551 org.apache.commons.compress.compressors.lzw and made it part
552 of the API that is officially supported. This will break
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100553 existing code that uses the old package. Thanks to Damjan Jovanovic.
Stefan Bodewigec075142015-01-26 05:12:09 +0000554
555For complete information on Apache Commons Compress, including instructions
556on how to submit bug reports, patches, or suggestions for improvement,
557see the Apache Commons Compress website:
558
Stefan Bodewig91b84322018-03-08 11:42:12 +0100559https://commons.apache.org/compress/
Stefan Bodewigec075142015-01-26 05:12:09 +0000560
561Old Release Notes
562=================
563
Stefan Bodewigde633062014-10-09 12:00:48 +0000564Release 1.9
565-----------
566
567New features:
568o Added support for DEFLATE streams without any gzip framing.
569 Issue: COMPRESS-263.
570 Thanks to Matthias Stevens.
571
572Fixed Bugs:
573o When reading 7z files unknown file properties and properties of type
574 kDummy are now ignored.
575 Issue: COMPRESS-287.
576o Expanding 7z archives using LZMA compression could cause an
577 EOFException.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100578 Issue: COMPRESS-286.
Stefan Bodewigde633062014-10-09 12:00:48 +0000579o Long-Name and -link or PAX-header entries in TAR archives always had
580 the current time as last modfication time, creating archives that
581 are different at the byte level each time an archive was built.
582 Issue: COMPRESS-289.
583 Thanks to Bob Robertson.
584
585Changes:
586o Checking for XZ for Java may be expensive. The result will now be
587 cached outside of an OSGi environment. You can use the new
588 XZUtils#setCacheXZAvailability to overrride this default behavior.
589 Issue: COMPRESS-285.
590
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000591Release 1.8.1
Stefan Bodewigde633062014-10-09 12:00:48 +0000592-------------
Sebastian Bazley48882f12010-04-13 21:02:37 +0000593
Stefan Bodewig48d74702013-03-10 17:10:57 +0000594New features:
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000595o COMPRESS-272: CompressorStreamFactory can now auto-detect Unix compress
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100596 (".Z") streams.
Stefan Bodewig48d74702013-03-10 17:10:57 +0000597
Sebastian Bazley48882f12010-04-13 21:02:37 +0000598Fixed Bugs:
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000599o COMPRESS-270: The snappy, ar and tar inputstreams might fail to read from a
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100600 non-buffered stream in certain cases.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000601o COMPRESS-277: IOUtils#skip might skip fewer bytes than requested even though
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100602 more could be read from the stream.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000603o COMPRESS-276: ArchiveStreams now validate there is a current entry before
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100604 reading or writing entry data.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000605o ArjArchiveInputStream#canReadEntryData tested the current
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100606 entry of the stream rather than its argument.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000607o COMPRESS-274: ChangeSet#delete and deleteDir now properly deal with unnamed
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100608 entries.
609o COMPRESS-273: Added a few null checks to improve robustness.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000610o COMPRESS-278: TarArchiveInputStream failed to read archives with empty
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100611 gid/uid fields.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000612o COMPRESS-279: TarArchiveInputStream now again throws an exception when it
613 encounters a truncated archive while reading from the last
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100614 entry.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000615o COMPRESS-280: Adapted TarArchiveInputStream#skip to the modified
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100616 IOUtils#skip method. Thanks to BELUGA BEHR.
Stefan Bodewig48d74702013-03-10 17:10:57 +0000617
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000618Changes:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100619o The dependency on org.tukaani:xz is now marked as optional.
Stefan Bodewigec5eebf2014-05-09 18:28:42 +0000620
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000621Release 1.8
622-----------
623
624New features:
625o GzipCompressorInputStream now provides access to the same
626 metadata that can be provided via GzipParameters when writing
627 a gzip stream.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100628 Issue: COMPRESS-260.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000629o SevenZOutputFile now supports chaining multiple
630 compression/encryption/filter methods and passing options to
631 the methods.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100632 Issue: COMPRESS-266.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000633o The (compression) method(s) can now be specified per entry in
634 SevenZOutputFile.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100635 Issue: COMPRESS-261.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000636o SevenZArchiveEntry "knows" which method(s) have been used to
637 write it to the archive.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100638 Issue: COMPRESS-258.
639o The 7z package now supports the delta filter as method.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000640o The 7z package now supports BCJ filters for several platforms.
641 You will need a version >= 1.5 of XZ for Java to read archives
642 using BCJ, though.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100643 Issue: COMPRESS-257.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000644
645Fixed Bugs:
646o BZip2CompressorInputStream read fewer bytes than possible from
647 a truncated stream.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100648 Issue: COMPRESS-253.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000649o SevenZFile failed claiming the dictionary was too large when
650 archives used LZMA compression for headers and content and
651 certain non-default dictionary sizes.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100652 Issue: COMPRESS-253.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000653o CompressorStreamFactory.createCompressorInputStream with
654 explicit compression did not honor decompressConcatenated
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100655 Issue: COMPRESS-259.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000656o TarArchiveInputStream will now read archives created by tar
657 implementations that encode big numbers by not adding a
658 trailing NUL.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100659 Issue: COMPRESS-262.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000660o ZipArchiveInputStream would return NUL bytes for the first 512
661 bytes of a STORED entry if it was the very first entry of the
662 archive.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100663 Issue: COMPRESS-264.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000664o When writing PAX/POSIX headers for TAR entries with
665 backslashes or certain non-ASCII characters in their name
666 TarArchiveOutputStream could fail.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100667 Issue: COMPRESS-265.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000668o ArchiveStreamFactory now throws a StreamingNotSupported - a
669 new subclass of ArchiveException - if it is asked to read from
670 or write to a stream and Commons Compress doesn't support
671 streaming for the format. This currently only applies to the
672 7z format.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100673 Issue: COMPRESS-267.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000674
675Release 1.7
676-----------
677
678New features:
679o Read-Only support for Snappy compression.
680 Issue: COMPRESS-147. Thanks to BELUGA BEHR.
681o Read-Only support for .Z compressed files.
682 Issue: COMPRESS-243. Thanks to Damjan Jovanovic.
683o ZipFile and ZipArchiveInputStream now support reading entries
684 compressed using the SHRINKING method. Thanks to Damjan Jovanovic.
685o GzipCompressorOutputStream now supports setting the compression
686 level and the header metadata (filename, comment, modification time,
687 operating system and extra flags)
688 Issue: COMPRESS-250. Thanks to Emmanuel Bourg.
689o ZipFile and ZipArchiveInputStream now support reading entries
690 compressed using the IMPLODE method.
691 Issue: COMPRESS-115. Thanks to Emmanuel Bourg.
692o ZipFile and the 7z file classes now implement Closeable and can be
693 used in try-with-resources constructs.
694
695Fixed Bugs:
696o SevenZOutputFile#closeArchiveEntry throws an exception when using
697 LZMA2 compression on Java8. Issue: COMPRESS-241.
698o 7z reading of big 64bit values could be wrong.
699 Issue: COMPRESS-244. Thanks to Nico Kruber.
700o TarArchiveInputStream could fail to read an archive completely.
701 Issue: COMPRESS-245.
702o The time-setters in X5455_ExtendedTimestamp now set the
703 corresponding flags explicitly - i.e. they set the bit if the valus
704 is not-null and reset it otherwise. This may cause
705 incompatibilities if you use setFlags to unset a bit and later set
706 the time to a non-null value - the flag will now be set.
707 Issue: COMPRESS-242.
708o SevenZOutputFile would create invalid archives if more than six
709 empty files or directories were included. Issue: COMPRESS-252.
710
711Release 1.6
712-----------
713
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100714Version 1.6 introduces changes to the internal API of the tar package that
715break backwards compatibility in the following rare cases. This version
716removes the package private TarBuffer class along with the protected "buffer"
717members in TarArchiveInputStream and TarArchiveOutputStream. This change will
718only affect you if you have created a subclass of one of the stream classes
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000719and accessed the buffer member or directly used the TarBuffer class.
720
721Changes in this version include:
722
723New features:
724o Added support for 7z archives. Most compression algorithms
725 can be read and written, LZMA and encryption are only
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100726 supported when reading. Issue: COMPRESS-54. Thanks to Damjan Jovanovic.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000727o Added read-only support for ARJ archives that don't use
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100728 compression. Issue: COMPRESS-226. Thanks to Damjan Jovanovic.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000729o DumpArchiveInputStream now supports an encoding parameter that
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100730 can be used to specify the encoding of file names.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000731o The CPIO streams now support an encoding parameter that can be
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100732 used to specify the encoding of file names.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000733o Read-only support for LZMA standalone compression has been added.
734 Issue: COMPRESS-111.
735
736Fixed Bugs:
737o TarBuffer.tryToConsumeSecondEOFRecord could throw a
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100738 NullPointerException Issue: COMPRESS-223. Thanks to Jeremy Gustie.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000739o Parsing of zip64 extra fields has become more lenient in order
740 to be able to read archives created by DotNetZip and maybe
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100741 other archivers as well. Issue: COMPRESS-228.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000742o TAR will now properly read the names of symbolic links with
743 long names that use the GNU variant to specify the long file
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100744 name. Issue: COMPRESS-229. Thanks to Christoph Gysin.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000745o ZipFile#getInputStream could return null if the archive
746 contained duplicate entries.
747 The class now also provides two new methods to obtain all
748 entries of a given name rather than just the first one.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100749 Issue: COMPRESS-227.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000750o CpioArchiveInputStream failed to read archives created by
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100751 Redline RPM. Issue: COMPRESS-236. Thanks to Andrew Duffy.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000752o TarArchiveOutputStream now properly handles link names that
753 are too long to fit into a traditional TAR header. Issue:
754 COMPRESS-237. Thanks to Emmanuel Bourg.
755o The auto-detecting create*InputStream methods of Archive and
756 CompressorStreamFactory could fail to detect the format of
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100757 blocking input streams. Issue: COMPRESS-239.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000758
759Changes:
760o Readabilty patch to TarArchiveInputStream. Issue:
761 COMPRESS-232. Thanks to BELUGA BEHR.
762o Performance improvements to TarArchiveInputStream, in
763 particular to the skip method. Issue: COMPRESS-234. Thanks to
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100764 BELUGA BEHR.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000765
766Release 1.5
767-----------
768
769New features:
770
771o CompressorStreamFactory has an option to create decompressing
772 streams that decompress the full input for formats that support
773 multiple concatenated streams.
774 Issue: COMPRESS-220.
775
776Fixed Bugs:
777
778o Typo in CompressorStreamFactory Javadoc
779 Issue: COMPRESS-218.
780 Thanks to Gili.
781o ArchiveStreamFactory's tar stream detection created false positives
782 for AIFF files.
783 Issue: COMPRESS-191.
784 Thanks to Jukka Zitting.
785o XZ for Java didn't provide an OSGi bundle. Compress' dependency on
786 it has now been marked optional so Compress itself can still be used
787 in an OSGi context.
788 Issue: COMPRESS-199.
789 Thanks to Jukka Zitting.
790o When specifying the encoding explicitly TarArchiveOutputStream would
791 write unreadable names in GNU mode or even cause errors in POSIX
792 mode for file names longer than 66 characters.
793 Issue: COMPRESS-200.
794 Thanks to Christian Schlichtherle.
795o Writing TAR PAX headers failed if the generated entry name ended
796 with a "/".
797 Issue: COMPRESS-203.
798o ZipArchiveInputStream sometimes failed to provide input to the
799 Inflater when it needed it, leading to reads returning 0.
800 Issue: COMPRESS-189.
801 Thanks to Daniel Lowe.
802o TarArchiveInputStream ignored the encoding for GNU long name
803 entries.
804 Issue: COMPRESS-212.
805o TarArchiveInputStream could leave the second EOF record inside the
806 stream it had just finished reading.
807 Issue: COMPRESS-206.
808 Thanks to Peter De Maeyer.
809o DumpArchiveInputStream no longer implicitly closes the original
810 input stream when it reaches the end of the archive.
811o ZipArchiveInputStream now consumes the remainder of the archive when
812 getNextZipEntry returns null.
813o Unit tests could fail if the source tree was checked out to a
814 directory tree containign spaces.
815 Issue: COMPRESS-205.
816 Thanks to Daniel Lowe.
817o Fixed a potential ArrayIndexOutOfBoundsException when reading STORED
818 entries from ZipArchiveInputStream.
819 Issue: COMPRESS-219.
820o CompressorStreamFactory can now be used without XZ for Java being
821 available.
822 Issue: COMPRESS-221.
823
824Changes:
825
826o Improved exception message if a zip archive cannot be read because
827 of an unsupported compression method.
828 Issue: COMPRESS-188.
829 Thanks to Harald Kuhn.
830o ArchiveStreamFactory has a setting for file name encoding that sets
831 up encoding for ZIP and TAR streams.
832 Issue: COMPRESS-192.
833 Thanks to Jukka Zitting.
834o TarArchiveEntry now has a method to verify its checksum.
835 Issue: COMPRESS-191.
836 Thanks to Jukka Zitting.
837o Split/spanned ZIP archives are now properly detected by
838 ArchiveStreamFactory but will cause an
839 UnsupportedZipFeatureException when read.
840o ZipArchiveInputStream now reads archives that start with a "PK00"
841 signature. Archives with this signatures are created when the
842 archiver was willing to split the archive but in the end only needed
843 a single segment - so didn't split anything.
844 Issue: COMPRESS-208.
845o TarArchiveEntry has a new constructor that allows setting linkFlag
846 and preserveLeadingSlashes at the same time.
847 Issue: COMPRESS-201.
848o ChangeSetPerformer has a new perform overload that uses a ZipFile
849 instance as input.
850 Issue: COMPRESS-159.
851o Garbage collection pressure has been reduced by reusing temporary
852 byte arrays in classes.
853 Issue: COMPRESS-172.
854 Thanks to Thomas Mair.
855o Can now handle zip extra field 0x5455 - Extended Timestamp.
856 Issue: COMPRESS-210.
857 Thanks to Julius Davies.
858o handle zip extra field 0x7875 - Info Zip New Unix Extra Field.
859 Issue: COMPRESS-211.
860 Thanks to Julius Davies.
861o ZipShort, ZipLong, ZipEightByteInteger should implement Serializable
862 Issue: COMPRESS-213.
863 Thanks to Julius Davies.
864o better support for unix symlinks in ZipFile entries.
865 Issue: COMPRESS-214.
866 Thanks to Julius Davies.
867o ZipFile's initialization has been improved for non-Zip64 archives.
868 Issue: COMPRESS-215.
869 Thanks to Robin Power.
870o Updated XZ for Java dependency to 1.2 as this version provides
871 proper OSGi manifest attributes.
872
873Release 1.4.1
874-------------
875
876This is a security bugfix release, see
Stefan Bodewig91b84322018-03-08 11:42:12 +0100877https://commons.apache.org/proper/commons-compress/security.html#Fixed_in_Apache_Commons_Compress_1.4.1
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000878
879Fixed Bugs:
880
881o Ported libbzip2's fallback sort algorithm to
882 BZip2CompressorOutputStream to speed up compression in certain
883 edge cases.
884
885Release 1.4
886-----------
887
888New features:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100889o COMPRESS-156: Support for the XZ format has been added.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000890
891Fixed Bugs:
892o COMPRESS-183: The tar package now allows the encoding of file names to be
893 specified and can optionally use PAX extension headers to
894 write non-ASCII file names.
895 The stream classes now write (or expect to read) archives that
896 use the platform's native encoding for file names. Apache
897 Commons Compress 1.3 used to strip everything but the lower
898 eight bits of each character which effectively only worked for
899 ASCII and ISO-8859-1 file names.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100900 This new default behavior is a breaking change.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000901o COMPRESS-184: TarArchiveInputStream failed to parse PAX headers that
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100902 contained non-ASCII characters.
903o COMPRESS-178: TarArchiveInputStream throws IllegalArgumentException instead of IOException
904o COMPRESS-179: TarUtils.formatLongOctalOrBinaryBytes() assumes the field will be 12 bytes long
905o COMPRESS-175: GNU Tar sometimes uses binary encoding for UID and GID
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000906o COMPRESS-171: ArchiveStreamFactory.createArchiveInputStream would claim
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100907 short text files were TAR archives.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000908o COMPRESS-164: ZipFile didn't work properly for archives using unicode extra
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100909 fields rather than UTF-8 filenames and the EFS-Flag.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000910o COMPRESS-169: For corrupt archives ZipFile would throw a RuntimeException in
911 some cases and an IOException in others. It will now
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100912 consistently throw an IOException.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000913
914Changes:
915o COMPRESS-182: The tar package can now write archives that use star/GNU/BSD
916 extensions or use the POSIX/PAX variant to store numeric
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100917 values that don't fit into the traditional header fields.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000918o COMPRESS-181: Added a workaround for a Bug some tar implementations that add
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100919 a NUL byte as first byte in numeric header fields.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000920o COMPRESS-176: Added a workaround for a Bug in WinZIP which uses backslashes
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100921 as path separators in Unicode Extra Fields.
922o COMPRESS-131: ArrayOutOfBounds while decompressing bz2. Added test case - code already seems to have been fixed.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000923o COMPRESS-146: BZip2CompressorInputStream now optionally supports reading of
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100924 concatenated .bz2 files.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000925o COMPRESS-154: GZipCompressorInputStream now optionally supports reading of
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100926 concatenated .gz files.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000927o COMPRESS-16: The tar package can now read archives that use star/GNU/BSD
928 extensions for files that are longer than 8 GByte as well as
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100929 archives that use the POSIX/PAX variant.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000930o COMPRESS-165: The tar package can now write archives that use star/GNU/BSD
931 extensions for files that are longer than 8 GByte as well as
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100932 archives that use the POSIX/PAX variant.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000933o COMPRESS-166: The tar package can now use the POSIX/PAX variant for writing
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100934 entries with names longer than 100 characters.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000935
936Release 1.3
937-----------
938
939Commons Compress 1.3 is the first version to require Java5 at runtime.
940
941Changes in this version include:
942
943New features:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100944o Support for the Pack200 format has been added. Issue: COMPRESS-142.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000945o Read-only support for the format used by the Unix dump(8) tool
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100946 has been added. Issue: COMPRESS-132.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000947
948Fixed Bugs:
949o BZip2CompressorInputStream's getBytesRead method always
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100950 returned 0.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000951o ZipArchiveInputStream and ZipArchiveOutputStream could leak
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100952 resources on some JDKs. Issue: COMPRESS-152.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000953o TarArchiveOutputStream's getBytesWritten method didn't count
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100954 correctly. Issue: COMPRESS-160.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000955
956Changes:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100957o The ZIP package now supports Zip64 extensions. Issue: COMPRESS-36.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000958o The AR package now supports the BSD dialect of storing file
959 names longer than 16 chars (both reading and writing).
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100960 Issue: COMPRESS-144.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000961
962Release 1.2
963-----------
964
965New features:
966o COMPRESS-123: ZipArchiveEntry has a new method getRawName that provides the
967 original bytes that made up the name. This may allow user
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100968 code to detect the encoding.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000969o COMPRESS-122: TarArchiveEntry provides access to the flags that determine
970 whether it is an archived symbolic link, pipe or other
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100971 "uncommon" file system object.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000972
973Fixed Bugs:
974o COMPRESS-129: ZipArchiveInputStream could fail with a "Truncated ZIP" error
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100975 message for entries between 2 GByte and 4 GByte in size.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000976o COMPRESS-145: TarArchiveInputStream now detects sparse entries using the
977 oldgnu format and properly reports it cannot extract their
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100978 contents.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000979o COMPRESS-130: The Javadoc for ZipArchiveInputStream#skip now matches the
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100980 implementation, the code has been made more defensive.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000981o COMPRESS-140: ArArchiveInputStream fails if entries contain only blanks for
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100982 userId or groupId. Thanks to Trejkaz.
983o COMPRESS-139: ZipFile may leak resources on some JDKs.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000984o COMPRESS-125: BZip2CompressorInputStream throws IOException if
985 underlying stream returns available() == 0.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100986 Removed the check.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000987o COMPRESS-127: Calling close() on inputStream returned by
988 CompressorStreamFactory.createCompressorInputStream()
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100989 does not close the underlying input stream.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000990o COMPRESS-119: TarArchiveOutputStream#finish now writes all buffered
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100991 data to the stream
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000992
993Changes:
994o ZipFile now implements finalize which closes the underlying
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100995 file.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000996o COMPRESS-117: Certain tar files not recognised by
Torsten Curdtce9e0ce2016-01-15 15:31:59 +0100997 ArchiveStreamFactory.
Stefan Bodewig0b71b472014-10-05 13:36:58 +0000998
999Release 1.1
1000-----------
1001
1002New features:
1003o COMPRESS-108: Command-line interface to list archive contents.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001004 Usage: java -jar commons-compress-n.m.jar archive-name [zip|tar|etc]
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001005o COMPRESS-109: Tar implementation does not support Pax headers
1006 Added support for reading pax headers.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001007 Note: does not support global pax headers
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001008o COMPRESS-103: ZipArchiveInputStream can optionally extract data that used
1009 the STORED compression method and a data descriptor.
1010 Doing so in a stream is not safe in general, so you have to
1011 explicitly enable the feature. By default the stream will
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001012 throw an exception if it encounters such an entry.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001013o COMPRESS-98: The ZIP classes will throw specialized exceptions if any
1014 attempt is made to read or write data that uses zip features
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001015 not supported (yet).
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001016o COMPRESS-99: ZipFile#getEntries returns entries in a predictable order -
1017 the order they appear inside the central directory.
1018 A new method getEntriesInPhysicalOrder returns entries in
1019 order of the entry data, i.e. the order ZipArchiveInputStream
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001020 would see.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001021o The Archive*Stream and ZipFile classes now have
1022 can(Read|Write)EntryData methods that can be used to check
1023 whether a given entry's data can be read/written.
1024 The method currently returns false for ZIP archives if an
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001025 entry uses an unsupported compression method or encryption.
1026o COMPRESS-89: The ZIP classes now detect encrypted entries.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001027o COMPRESS-97: Added autodetection of compression format to
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001028 CompressorStreamFactory.
1029o COMPRESS-95: Improve ExceptionMessages in ArchiveStreamFactory Thanks to Joerg Bellmann.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001030o A new constructor of TarArchiveEntry can create entries with
1031 names that start with slashes - the default is to strip
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001032 leading slashes in order to create relative path names.
1033o ArchiveEntry now has a getLastModifiedDate method.
1034o COMPRESS-78: Add a BZip2Utils class modelled after GZipUtils Thanks to Jukka Zitting.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001035
1036Fixed Bugs:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001037o COMPRESS-72: Move acknowledgements from NOTICE to README
1038o COMPRESS-113: TarArchiveEntry.parseTarHeader() includes the trailing space/NUL when parsing the octal size
1039o COMPRESS-118: TarUtils.parseName does not properly handle characters outside the range 0-127
1040o COMPRESS-107: ArchiveStreamFactory does not recognise tar files created by Ant
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001041o COMPRESS-110: Support "ustar" prefix field, which is used when file paths are longer
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001042 than 100 characters.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001043o COMPRESS-100: ZipArchiveInputStream will throw an exception if it detects an
1044 entry that uses a data descriptor for a STORED entry since it
1045 cannot reliably find the end of data for this "compression"
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001046 method.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001047o COMPRESS-101: ZipArchiveInputStream should now properly read archives that
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001048 use data descriptors but without the "unofficial" signature.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001049o COMPRESS-74: ZipArchiveInputStream failed to update the number of bytes
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001050 read properly.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001051o ArchiveInputStream has a new method getBytesRead that should
1052 be preferred over getCount since the later may truncate the
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001053 number of bytes read for big archives.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001054o COMPRESS-85: The cpio archives created by CpioArchiveOutputStream couldn't
1055 be read by many existing native implementations because the
1056 archives contained multiple entries with the same inode/device
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001057 combinations and weren't padded to a blocksize of 512 bytes.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001058o COMPRESS-73: ZipArchiveEntry, ZipFile and ZipArchiveInputStream are now
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001059 more lenient when parsing extra fields.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001060o COMPRESS-82: cpio is terribly slow.
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001061 Documented that buffered streams are needed for performance
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001062o Improved exception message if the extra field data in ZIP
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001063 archives cannot be parsed.
1064o COMPRESS-17: Tar format unspecified - current support documented.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001065o COMPRESS-94: ZipArchiveEntry's equals method was broken for entries created
1066 with the String-arg constructor. This lead to broken ZIP
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001067 archives if two different entries had the same hash code. Thanks to Anon Devs.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001068o COMPRESS-87: ZipArchiveInputStream could repeatedly return 0 on read() when
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001069 the archive was truncated. Thanks to Antoni Mylka.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001070o COMPRESS-86: Tar archive entries holding the file name for names longer
1071 than 100 characters in GNU longfile mode didn't properly
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001072 specify they'd be using the "oldgnu" extension.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001073o COMPRESS-83: Delegate all read and write methods in GZip stream in order to
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001074 speed up operations.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001075o The ar and cpio streams now properly read and write last
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001076 modified times.
1077o COMPRESS-81: TarOutputStream can leave garbage at the end of the archive
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001078
1079Changes:
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001080o COMPRESS-112: ArArchiveInputStream does not handle GNU extended filename records (//)
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001081o COMPRESS-105: Document that the name of an ZipArchiveEntry determines whether
1082 an entry is considered a directory or not.
1083 If you don't use the constructor with the File argument the entry's
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001084 name must end in a "/" in order for the entry to be known as a directory.
1085o COMPRESS-79: Move DOS/Java time conversions into Zip utility class.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001086o COMPRESS-75: ZipArchiveInputStream does not show location in file
Torsten Curdtce9e0ce2016-01-15 15:31:59 +01001087 where a problem occurred.
Stefan Bodewig0b71b472014-10-05 13:36:58 +00001088