• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1              Apache Commons Compress RELEASE NOTES
2
3Apache Commons Compress software defines an API for working with
4compression and archive formats.  These include: bzip2, gzip, pack200,
5lzma, xz, Snappy, traditional Unix Compress, DEFLATE, DEFLATE64, LZ4,
6Brotli, Zstandard and ar, cpio, jar, tar, zip, dump, 7z, arj.
7
8Release 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
46Release 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.
53o Add a new SkipShieldingInputStream class that can be used with
54  streams that throw an IOException when skip is invoked.
55  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
97Release 1.16.1
98--------------
99
100Fixed Bug:
101o Fixed the OSGi manifest entry for imports that has been broken
102  in 1.16.
103  Issue: COMPRESS-442.
104
105Release 1.16
106------------
107
108New features:
109o Add read-only support for Zstandard compression based on the
110  Zstd-jni project.
111  Issue: COMPRESS-423. Thanks to Andre F de Miranda.
112o Added auto-detection for Zstandard compressed streams.
113  Issue: COMPRESS-425.
114o Added write-support for Zstandard compression.
115  Issue: COMPRESS-426.
116o Added read-only DEFLATE64 support to ZIP archives and as
117  stand-alone CompressorInputStream.
118  Issue: COMPRESS-380. Thanks to Christian Marquez Grabia.
119o Added read-only DEFLATE64 support to 7z archives.
120  Issue: COMPRESS-437.
121
122Fixed Bugs:
123o Synchronized iteration over a synchronizedList in
124  ParallelScatterZipCreator.
125  Issue: COMPRESS-430. Thanks to Bruno P. Kinoshita.
126o ZipFile could get stuck in an infinite loop when parsing ZIP
127  archives with certain strong encryption headers.
128  Issue: COMPRESS-432.
129o Added improved checks to detect corrupted bzip2 streams and
130  throw the expected IOException rather than obscure
131  RuntimeExceptions.
132  Issue: COMPRESS-424.
133
134Changes:
135o Replaces instanceof checks with a type marker in LZ77 support code.
136  Issue: COMPRESS-435. Thanks to BELUGA BEHR.
137o Updated XZ for Java dependency to 1.8 in order to pick up bug fix
138  to LZMA2InputStream's available method.
139o ZipArchiveEntry now exposes how the name or comment have been
140  determined when the entry was read.
141  Issue: COMPRESS-429. Thanks to Damiano Albani.
142o ZipFile.getInputStream will now always buffer the stream
143  internally in order to improve read performance.
144  Issue: COMPRESS-438.
145o Speed improvement for DEFLATE64 decompression.
146  Issue: COMPRESS-440. Thanks to Dawid Weiss.
147o Added a few extra sanity checks for the rarer compression
148  methods used in ZIP archives.
149  Issue: COMPRESS-436.
150o Simplified the special handling for the dummy byte required by
151  zlib when using java.util.zip.Inflater.
152  Issue: COMPRESS-441.
153o Various code cleanups.
154  Github Pull Request #61. Thanks to Shahab Kondri.
155o TarArchiveEntry's preserveLeadingSlashes constructor argument
156  has been renamed and can now also be used to preserve the
157  drive letter on Windows.
158
159Release 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
220Release 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
279Release 1.13
280------------
281
282Commons Compress 1.13 is the first version to require Java 7 at
283runtime.
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
331Release 1.12
332------------
333
334Commons Compress 1.12 is the first version to require Java 6 at
335runtime.
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.
364  Issue: COMPRESS-349.
365o TarArchiveEntry wastefully allocates empty arrays.
366  Issue: COMPRESS-350.
367o 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
386Release 1.11
387------------
388
389New 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.
408o TarArchiveEntry's preserveLeadingSlashes is now a property and used
409  on later calls to setName, too.
410  This behavior is a breaking change.
411  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.
461
462Release 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.
468
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.
473
474New features:
475o CompressorStreamFactory can now auto-detect DEFLATE streams
476  with ZLIB header.
477  Issue: COMPRESS-316. Thanks to Nick Burch.
478o CompressorStreamFactory can now auto-detect LZMA streams.
479  Issue: COMPRESS-313.
480o 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.
489  Issue: COMPRESS-296. Thanks to Kristian Rosenvold.
490o 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
497  near future. Thanks to Kristian Rosenvold.
498o New methods in ZipArchiveOutputStream and ZipFile allows
499  entries to be copied from one archive to another without
500  having to re-compress them.
501  Issue: COMPRESS-295. Thanks to Kristian Rosenvold.
502
503Fixed Bugs:
504o TarArchiveInputStream can now read entries with group or
505  user ids > 0x80000000.
506  Issue: COMPRESS-314.
507o TarArchiveOutputStream can now write entries with group or
508  user ids > 0x80000000.
509  Issue: COMPRESS-315.
510o TarArchiveEntry's constructor with a File and a String arg
511  didn't normalize the name.
512  Issue: COMPRESS-312.
513o ZipEncodingHelper no longer reads system properties directly
514  to determine the default charset.
515  Issue: COMPRESS-308.
516o BZip2CompressorInputStream#read would return -1 when asked to
517  read 0 bytes.
518  Issue: COMPRESS-309.
519o ArchiveStreamFactory fails to pass on the encoding when creating
520  some streams.
521    * ArjArchiveInputStream
522    * CpioArchiveInputStream
523    * DumpArchiveInputStream
524    * JarArchiveInputStream
525    * TarArchiveInputStream
526    * JarArchiveOutputStream
527  Issue: COMPRESS-306.
528o 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.
531  Issue: COMPRESS-302.
532o 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.
536o 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.
539  Issue: COMPRESS-297.
540o Improved error message when tar encounters a groupId that is
541  too big to write without using the STAR or POSIX format.
542  Issue: COMPRESS-290. Thanks to Kristian Rosenvold.
543o SevenZFile now throws the specific PasswordRequiredException
544  when it encounters an encrypted stream but no password has
545  been specified.
546  Issue: COMPRESS-298.
547
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
553  existing code that uses the old package. Thanks to Damjan Jovanovic.
554
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
559https://commons.apache.org/compress/
560
561Old Release Notes
562=================
563
564Release 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.
578  Issue: COMPRESS-286.
579o 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
591Release 1.8.1
592-------------
593
594New features:
595o COMPRESS-272:  CompressorStreamFactory can now auto-detect Unix compress
596                 (".Z") streams.
597
598Fixed Bugs:
599o COMPRESS-270:  The snappy, ar and tar inputstreams might fail to read from a
600                 non-buffered stream in certain cases.
601o COMPRESS-277:  IOUtils#skip might skip fewer bytes than requested even though
602                 more could be read from the stream.
603o COMPRESS-276:  ArchiveStreams now validate there is a current entry before
604                 reading or writing entry data.
605o ArjArchiveInputStream#canReadEntryData tested the current
606                 entry of the stream rather than its argument.
607o COMPRESS-274:  ChangeSet#delete and deleteDir now properly deal with unnamed
608                 entries.
609o COMPRESS-273:  Added a few null checks to improve robustness.
610o COMPRESS-278:  TarArchiveInputStream failed to read archives with empty
611                 gid/uid fields.
612o COMPRESS-279:  TarArchiveInputStream now again throws an exception when it
613                 encounters a truncated archive while reading from the last
614                 entry.
615o COMPRESS-280:  Adapted TarArchiveInputStream#skip to the modified
616                 IOUtils#skip method. Thanks to BELUGA BEHR.
617
618Changes:
619o The dependency on org.tukaani:xz is now marked as optional.
620
621Release 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.
628  Issue: COMPRESS-260.
629o SevenZOutputFile now supports chaining multiple
630  compression/encryption/filter methods and passing options to
631  the methods.
632  Issue: COMPRESS-266.
633o The (compression) method(s) can now be specified per entry in
634  SevenZOutputFile.
635  Issue: COMPRESS-261.
636o SevenZArchiveEntry "knows" which method(s) have been used to
637  write it to the archive.
638  Issue: COMPRESS-258.
639o The 7z package now supports the delta filter as method.
640o 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.
643  Issue: COMPRESS-257.
644
645Fixed Bugs:
646o BZip2CompressorInputStream read fewer bytes than possible from
647  a truncated stream.
648  Issue: COMPRESS-253.
649o 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.
652  Issue: COMPRESS-253.
653o CompressorStreamFactory.createCompressorInputStream with
654  explicit compression did not honor decompressConcatenated
655  Issue: COMPRESS-259.
656o TarArchiveInputStream will now read archives created by tar
657  implementations that encode big numbers by not adding a
658  trailing NUL.
659  Issue: COMPRESS-262.
660o 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.
663  Issue: COMPRESS-264.
664o When writing PAX/POSIX headers for TAR entries with
665  backslashes or certain non-ASCII characters in their name
666  TarArchiveOutputStream could fail.
667  Issue: COMPRESS-265.
668o 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.
673  Issue: COMPRESS-267.
674
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
714Version 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
719and 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
726  supported when reading.  Issue: COMPRESS-54. Thanks to Damjan Jovanovic.
727o Added read-only support for ARJ archives that don't use
728  compression.  Issue: COMPRESS-226. Thanks to Damjan Jovanovic.
729o DumpArchiveInputStream now supports an encoding parameter that
730  can be used to specify the encoding of file names.
731o The CPIO streams now support an encoding parameter that can be
732  used to specify the encoding of file names.
733o Read-only support for LZMA standalone compression has been added.
734  Issue: COMPRESS-111.
735
736Fixed Bugs:
737o TarBuffer.tryToConsumeSecondEOFRecord could throw a
738  NullPointerException  Issue: COMPRESS-223. Thanks to Jeremy Gustie.
739o Parsing of zip64 extra fields has become more lenient in order
740  to be able to read archives created by DotNetZip and maybe
741  other archivers as well.  Issue: COMPRESS-228.
742o TAR will now properly read the names of symbolic links with
743  long names that use the GNU variant to specify the long file
744  name.  Issue: COMPRESS-229. Thanks to Christoph Gysin.
745o 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.
749  Issue: COMPRESS-227.
750o CpioArchiveInputStream failed to read archives created by
751  Redline RPM.  Issue: COMPRESS-236. Thanks to Andrew Duffy.
752o 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
757  blocking input streams.  Issue: COMPRESS-239.
758
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
764  BELUGA BEHR.
765
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
877https://commons.apache.org/proper/commons-compress/security.html#Fixed_in_Apache_Commons_Compress_1.4.1
878
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:
889o COMPRESS-156:  Support for the XZ format has been added.
890
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.
900                 This new default behavior is a breaking change.
901o COMPRESS-184:  TarArchiveInputStream failed to parse PAX headers that
902                 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
906o COMPRESS-171:  ArchiveStreamFactory.createArchiveInputStream would claim
907                 short text files were TAR archives.
908o COMPRESS-164:  ZipFile didn't work properly for archives using unicode extra
909                 fields rather than UTF-8 filenames and the EFS-Flag.
910o COMPRESS-169:  For corrupt archives ZipFile would throw a RuntimeException in
911                 some cases and an IOException in others.  It will now
912                 consistently throw an IOException.
913
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
917                 values that don't fit into the traditional header fields.
918o COMPRESS-181:  Added a workaround for a Bug some tar implementations that add
919                 a NUL byte as first byte in numeric header fields.
920o COMPRESS-176:  Added a workaround for a Bug in WinZIP which uses backslashes
921                 as path separators in Unicode Extra Fields.
922o COMPRESS-131:  ArrayOutOfBounds while decompressing bz2. Added test case - code already seems to have been fixed.
923o COMPRESS-146:  BZip2CompressorInputStream now optionally supports reading of
924                 concatenated .bz2 files.
925o COMPRESS-154:  GZipCompressorInputStream now optionally supports reading of
926                 concatenated .gz files.
927o 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
929                 archives that use the POSIX/PAX variant.
930o 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
932                 archives that use the POSIX/PAX variant.
933o COMPRESS-166:  The tar package can now use the POSIX/PAX variant for writing
934                 entries with names longer than 100 characters.
935
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:
944o Support for the Pack200 format has been added.  Issue: COMPRESS-142.
945o Read-only support for the format used by the Unix dump(8) tool
946  has been added.  Issue: COMPRESS-132.
947
948Fixed Bugs:
949o BZip2CompressorInputStream's getBytesRead method always
950  returned 0.
951o ZipArchiveInputStream and ZipArchiveOutputStream could leak
952  resources on some JDKs.  Issue: COMPRESS-152.
953o TarArchiveOutputStream's getBytesWritten method didn't count
954  correctly.  Issue: COMPRESS-160.
955
956Changes:
957o The ZIP package now supports Zip64 extensions.  Issue: COMPRESS-36.
958o The AR package now supports the BSD dialect of storing file
959  names longer than 16 chars (both reading and writing).
960  Issue: COMPRESS-144.
961
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
968        code to detect the encoding.
969o COMPRESS-122:  TarArchiveEntry provides access to the flags that determine
970        whether it is an archived symbolic link, pipe or other
971        "uncommon" file system object.
972
973Fixed Bugs:
974o COMPRESS-129:  ZipArchiveInputStream could fail with a "Truncated ZIP" error
975        message for entries between 2 GByte and 4 GByte in size.
976o COMPRESS-145:  TarArchiveInputStream now detects sparse entries using the
977        oldgnu format and properly reports it cannot extract their
978        contents.
979o COMPRESS-130:  The Javadoc for ZipArchiveInputStream#skip now matches the
980        implementation, the code has been made more defensive.
981o COMPRESS-140:  ArArchiveInputStream fails if entries contain only blanks for
982        userId or groupId. Thanks to Trejkaz.
983o COMPRESS-139:  ZipFile may leak resources on some JDKs.
984o COMPRESS-125:  BZip2CompressorInputStream throws IOException if
985        underlying stream returns available() == 0.
986        Removed the check.
987o COMPRESS-127:  Calling close() on inputStream returned by
988        CompressorStreamFactory.createCompressorInputStream()
989        does not close the underlying input stream.
990o COMPRESS-119:  TarArchiveOutputStream#finish now writes all buffered
991        data to the stream
992
993Changes:
994o ZipFile now implements finalize which closes the underlying
995        file.
996o COMPRESS-117:  Certain tar files not recognised by
997        ArchiveStreamFactory.
998
999Release 1.1
1000-----------
1001
1002New features:
1003o COMPRESS-108:  Command-line interface to list archive contents.
1004       Usage: java -jar commons-compress-n.m.jar archive-name [zip|tar|etc]
1005o COMPRESS-109:  Tar implementation does not support Pax headers
1006       Added support for reading pax headers.
1007       Note: does not support global pax headers
1008o 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
1012        throw an exception if it encounters such an entry.
1013o COMPRESS-98:  The ZIP classes will throw specialized exceptions if any
1014        attempt is made to read or write data that uses zip features
1015        not supported (yet).
1016o 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
1020        would see.
1021o 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
1025        entry uses an unsupported compression method or encryption.
1026o COMPRESS-89:  The ZIP classes now detect encrypted entries.
1027o COMPRESS-97:  Added autodetection of compression format to
1028        CompressorStreamFactory.
1029o COMPRESS-95:  Improve ExceptionMessages in ArchiveStreamFactory Thanks to Joerg Bellmann.
1030o A new constructor of TarArchiveEntry can create entries with
1031        names that start with slashes - the default is to strip
1032        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.
1035
1036Fixed Bugs:
1037o 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
1041o COMPRESS-110:  Support "ustar" prefix field, which is used when file paths are longer
1042       than 100 characters.
1043o 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"
1046        method.
1047o COMPRESS-101:  ZipArchiveInputStream should now properly read archives that
1048        use data descriptors but without the "unofficial" signature.
1049o COMPRESS-74:  ZipArchiveInputStream failed to update the number of bytes
1050        read properly.
1051o ArchiveInputStream has a new method getBytesRead that should
1052        be preferred over getCount since the later may truncate the
1053        number of bytes read for big archives.
1054o 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
1057        combinations and weren't padded to a blocksize of 512 bytes.
1058o COMPRESS-73:  ZipArchiveEntry, ZipFile and ZipArchiveInputStream are now
1059        more lenient when parsing extra fields.
1060o COMPRESS-82:  cpio is terribly slow.
1061        Documented that buffered streams are needed for performance
1062o Improved exception message if the extra field data in ZIP
1063        archives cannot be parsed.
1064o COMPRESS-17:  Tar format unspecified - current support documented.
1065o COMPRESS-94:  ZipArchiveEntry's equals method was broken for entries created
1066        with the String-arg constructor.  This lead to broken ZIP
1067        archives if two different entries had the same hash code. Thanks to Anon Devs.
1068o COMPRESS-87:  ZipArchiveInputStream could repeatedly return 0 on read() when
1069        the archive was truncated. Thanks to Antoni Mylka.
1070o COMPRESS-86:  Tar archive entries holding the file name for names longer
1071        than 100 characters in GNU longfile mode didn't properly
1072        specify they'd be using the "oldgnu" extension.
1073o COMPRESS-83:  Delegate all read and write methods in GZip stream in order to
1074        speed up operations.
1075o The ar and cpio streams now properly read and write last
1076        modified times.
1077o COMPRESS-81:  TarOutputStream can leave garbage at the end of the archive
1078
1079Changes:
1080o COMPRESS-112:  ArArchiveInputStream does not handle GNU extended filename records (//)
1081o 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
1084        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.
1086o COMPRESS-75:  ZipArchiveInputStream does not show location in file
1087       where a problem occurred.
1088
1089