Author: bodewig Date: Fri Jul 9 17:06:02 2021 New Revision: 48755 Log: RC1 of Commons Compress 1.21
Added: dev/commons/compress/README.html - copied, changed from r41696, release/commons/compress/README.html dev/commons/compress/RELEASE-NOTES.txt (with props) dev/commons/compress/binaries/commons-compress-1.21-bin.tar.gz (with props) dev/commons/compress/binaries/commons-compress-1.21-bin.tar.gz.asc dev/commons/compress/binaries/commons-compress-1.21-bin.tar.gz.sha512 dev/commons/compress/binaries/commons-compress-1.21-bin.zip (with props) dev/commons/compress/binaries/commons-compress-1.21-bin.zip.asc dev/commons/compress/binaries/commons-compress-1.21-bin.zip.sha512 dev/commons/compress/source/commons-compress-1.21-src.tar.gz (with props) dev/commons/compress/source/commons-compress-1.21-src.tar.gz.asc dev/commons/compress/source/commons-compress-1.21-src.tar.gz.sha512 dev/commons/compress/source/commons-compress-1.21-src.zip (with props) dev/commons/compress/source/commons-compress-1.21-src.zip.asc dev/commons/compress/source/commons-compress-1.21-src.zip.sha512 Copied: dev/commons/compress/README.html (from r41696, release/commons/compress/README.html) ============================================================================== --- release/commons/compress/README.html (original) +++ dev/commons/compress/README.html Fri Jul 9 17:06:02 2021 @@ -1,6 +1,6 @@ -<h1>Commons-Compress 1.20</h1> +<h1>Commons-Compress 1.21</h1> -<p>This is the 1.20 release of commons-compress. It is available in both binary and source distributions.</p> +<p>This is the 1.21 release of commons-compress. It is available in both binary and source distributions.</p> <p><font color="red" size="+2">Note:</font> The tar files in the distribution use GNU tar extensions @@ -34,12 +34,12 @@ href="https://www.apache.org/dist/common <pre>Always test available signatures, <i>e.g.</i>, $ pgpk -a KEYS -$ pgpv commons-compress-1.20-bin.tar.gz.asc +$ pgpv commons-compress-1.21-bin.tar.gz.asc or, $ pgp -ka KEYS -$ pgp commons-compress-1.20-bin.tar.gz.asc +$ pgp commons-compress-1.21-bin.tar.gz.asc or, $ gpg --import KEYS -$ gpg --verify commons-compress-1.20-bin.tar.gz.asc +$ gpg --verify commons-compress-1.21-bin.tar.gz.asc </pre> <p> Added: dev/commons/compress/RELEASE-NOTES.txt ============================================================================== --- dev/commons/compress/RELEASE-NOTES.txt (added) +++ dev/commons/compress/RELEASE-NOTES.txt Fri Jul 9 17:06:02 2021 @@ -0,0 +1,1570 @@ + Apache Commons Compress RELEASE NOTES + +Apache Commons Compress software defines an API for working with +compression and archive formats. These include: bzip2, gzip, pack200, +lzma, xz, Snappy, traditional Unix Compress, DEFLATE, DEFLATE64, LZ4, +Brotli, Zstandard and ar, cpio, jar, tar, zip, dump, 7z, arj. + +Release 1.21 +------------ + +Compress 1.20 now at least requires Java 8 to build and run. + +SevenZFileOptions has a new setting that needs to be enabled explicity +if SevenZFile should try to recover broken archives - a feature +introduced with Commons Compress 1.19. This is a breaking change if +you relied on the recovery attempt. + +Several formats may now throw IOExceptions when reading broken +archives or streams that would have caused arbitrary RuntimeExceptions +in earlier versions of Compress. + +New features: +o Add writePreamble to ZipArchiveInputStream. This method could + write raw data to zip archive before any entry was written to + the zip archive. + For most of the time, this is used to create self-extracting + zip. + Github Pull Request #127. + Issue: COMPRESS-550. + Thanks to Scott Frederick. +o Added support for random access to the TAR packages. + Github Pull Request #113. + Issue: COMPRESS-540. + Thanks to Robin Schimpf. +o Added support for BufferPool in ZstdCompressorInputStream. + Github Pull Request #165. + Issue: COMPRESS-565. + Thanks to Michael L Heuer. +o Commons Compress cannot be built with JDK14 due to Pack200 removal. + Add Pack200 implementation from Apache Harmony. + Issue: COMPRESS-507. + Thanks to Gary Gregory, Apache Harmony. +o Add a new AlwaysWithCompatibility in Zip64Mode, this is a + compromise for some libraries including 7z and Expand-Archive + Powershell utility(and likely Excel). + + And we will encode both the LFH offset and Disk Number Start + in the ZIP64 Extended Information Extra Field - even if only + the disk number needs to be encoded. + + Github Pull Request #169. + Issue: COMPRESS-565. + Thanks to Evgenii Bovykin. +o gzip deflate buffer size is now configurable. + Issue: COMPRESS-566. + Thanks to Brett Okken. + +Fixed Bugs: +o Fix bugs in random access of 7z. Problems may happen + in a mixture use of random access and sequential access + of 7z. + Github Pull Request #95. + Issue: COMPRESS-505. +o Fix bugs in random access of 7z. Exceptions are thrown + when reading the first entry multiple times by random + access. + Issue: COMPRESS-510. +o Add '/' to directories with long name in tar. This is to + resolve the ambiguous behavior of the TarArchiveEntry.getName() + method between directory with short name and long name. + Issue: COMPRESS-509. + Thanks to Petr Vasak. +o Removed the PowerMock dependency. + Issue: COMPRESS-520. + Thanks to Robin Schimpf. +o Added improved checks to detect corrupted bzip2 streams and + throw the expected IOException rather than obscure + RuntimeExceptions. + See also COMPRESS-519. + Issue: COMPRESS-516. +o Improved parsing of X5455_ExtendedTimestamp ZIP extra field. + Issue: COMPRESS-517. +o ZipArchiveInputStream and ZipFile will now throw an + IOException rather than a RuntimeException if the zip64 extra + field of an entry could not be parsed. + Issue: COMPRESS-518. +o Improved detection of corrupt ZIP archives in ZipArchiveInputStream. + Issue: COMPRESS-523. +o Added improved checks to detect corrupted deflate64 streams and + throw the expected IOException rather than obscure + RuntimeExceptions. + Issues: COMPRESS-521, COMPRESS-522, COMPRESS-525, COMPRESS-526, and COMPRESS-527. +o Add the archive name in the exception in the constructor of + ZipFile to make it a more specific exception. + Github Pull Request #102. + Issue: COMPRESS-515. + Thanks to ian-lavallee. +o Throw IOException when it encounters a non-number while parsing pax + header. + Issue: COMPRESS-530. +o Throw IOException when a a tar archive contains a PAX header + without any normal entry following it. + Issue: COMPRESS-531. +o Added improved checks to detect corrupted IMPLODED streams and + throw the expected IOException rather than obscure + RuntimeExceptions. + Issue: COMPRESS-532. +o Throw expected IOException instead of NumberFormatException if + it encounters non-numbers when parsing pax headers for tarball. + + Throw IllegalArgumentException instead of RuntimeExceptions if + the file name is longer than 100 bytes with the longFileMode + of LONGFILE_ERROR, and address this in java docs. + + Throw IllegalArgumentException instead of RuntimeExceptions if + the any of the numeric values of an entry exceeds the limits + of a traditional tar header while bigNumberMode is + BIGNUMBER_ERROR, and address this in java docs. + Issue: COMPRESS-529. +o Fix for test fails on Windows. The tests are failing because the + default charset is not UTF-8. + Issue: COMPRESS-543. + Thanks to wulf2333. +o TarArchiveInputStream can not detect a truncated tar in skip() + and skipRecordPadding(). + Issue: COMPRESS-544. + Thanks to Aditya Prasad. +o Make the memory allocation in SevenZFile.readFilesInfo a lazy + allocation to avoid OOM when dealing some giant 7z archives. + Github Pull Request #120. + + Also added sanity checks before even trying to parse an + archive and made SevenZFileOptions' maxMemorySizeInKb apply to + the stored metadata for an archive. + + And further added an option that needs to be enabled in order + to make SevenZFile try to recover a broken archive. This is a + backwards incompatible change. + Issue: COMPRESS-542. + Thanks to theobisproject. +o ZipArchiveInputStream should throw an exception if a corrputed + zip64 extra field is met. + Issue: COMPRESS-546. + Thanks to Maksim Zuev. +o Add a new maven profile in pom.xml for JDK14+ to ignore the + failing tests about Pack200. + + This has later been superseeded by adding the Apache Harmony + classes for Pack200 support. +o Throw an IOException when reading the zip extra field if the + length is too short. + Issue: COMPRESS-548. + Thanks to Maksim Zuev. +o Throw an declared IOException if a null entry is met when + reading a global pax header instead of a runtime NPE. + Issue: COMPRESS-554. + Thanks to Maksim Zuev. +o ZIP extraction could lead to ArrayIndexOutOfBoundsExceptions + rather than the expected IOException. + Issue: COMPRESS-545. + Thanks to Maksim Zuev. +o Add asserts for Arrays.copyOf in X0017_StrongEncryptionHeader. + Issue: COMPRESS-547. + Thanks to Maksim Zuev. +o Fix for the CFH signature detect in ZipArchiveInputStream. + The problem could be reproduced by a zip archive with Data + Descriptor and STORED, and without the Data Descriptor + signature. +o The length validation in TarArchiveInputStream.parsePaxHeaders + should also consider the headers with length smaller than 1 + and ignore these headers. + Issue: COMPRESS-553. + Thanks to Maksim Zuev. +o Fix accidentally added '/' to file names. + This problem is caused by the incomplete fix of COMPRESS-509. + Github Pull Request #151. + Issue: COMPRESS-558. + Thanks to Robin Schimpf. +o As sparse entries can be successfully parsed now, + TarArchiveInputStream.canReadEntryData should return + true if the entry is a sparse entry. + Github Pull Request #153. + Issue: COMPRESS-560. + Thanks to Robin Schimpf. +o SparseFilesTest#testExtractPaxGNU should be skipped + if the version of GNU tar binary is 1.28. + Github Pull Request #152. + Issue: COMPRESS-559. + Thanks to Robin Schimpf. +o Removed an empty loop that was just warming the planet for + certain ZIP archives. + Github Pull Request #172. + Thanks to Fabian Meumertzheim. +o Made some of the stream classes used internally throw + IOExceptions on illegal arguments rather than + RuntimeExceptions to make it more likely that corrupt archives + cause expected checked exceptions rather than RuntimException + for various formats. + + Fixes a specific case for ZIP but affects other formats as + well. + Issue: COMPRESS-567. +o Simplify Assertions #205. + Thanks to Arturo Bernal. +o Checked the sizes read for archive entries and reject archives + as broken with negative entry sizes. + + Fixes an infinite loop in the new TarFile class but affects + several formats. + Issue: COMPRESS-569. +o OSGi detection was broken and so we always cached whether + xz/brotli/zstd/lzma have been available even in OSGi + environments. + Issue: COMPRESS-552. +o SevenZFile.getEntries now return a copy of entries. + Issue: COMPRESS-571. +o Handling of sparse tar entries has been hardened to ensure bad + inputs cause expected IOExceptions rather than RuntimeExceptions. + Issue: COMPRESS-575. +o The parser for GNU sparse tar headers could throw a + NullPointerExcpetion rather than an IOException if the archive + ended while more sparse headers were expected. + +Changes: +o Made sure ZstdCompressorOutputStream no longer used + deprecated ZstOutputStream constructors. + Github Pull Request #94. + Thanks to Peter Alfred Lee. +o Make compression level of ParallelScatterZipCreator + configurable via a new constructor. + Issue: COMPRESS-504. +o Made an inner class static + Github Pull Request #107. + Issue: COMPRESS-536. + Thanks to Jin Xu. +o added an early exit to a loop in BZip2CompressorOutputStream + Github Pull Request #106. + Issue: COMPRESS-535. + Thanks to Jin Xu. +o Update the class of variable file in TarArchiveEntry from + java.io.File to java.nio.file.Path. Corresponding constructors + and methods are also modified/added. + Github Pull Request #97. + Issue: COMPRESS-404. + Thanks to theobisproject. +o Reuse the record buffer in TarArchiveInputStream. + Issue: COMPRESS-539. + Thanks to Robin Schimpf. +o Add SevenZOutputFile.write(InputStream). + Thanks to Gary Gregory. +o Add SevenZOutputFile.write(Path, OpenOption...). + Thanks to Gary Gregory. +o Add SevenZOutputFile.createArchiveEntry(Path, String, LinkOption...). + Thanks to Gary Gregory. +o Add ArArchiveOutputStream.createArchiveEntry(Path, String, LinkOption...). + Thanks to Gary Gregory. +o Add ArArchiveEntry(Path, String, LinkOption...). + Thanks to Gary Gregory. +o Add ctor CpioArchiveEntry(Path, String, LinkOption...). + Thanks to Gary Gregory. +o Add ctor CpioArchiveEntry(short, Path, String, LinkOption...). + Thanks to Gary Gregory. +o Add CpioArchiveEntry.setTime(FileTime). + Thanks to Gary Gregory. +o Add TarArchiveOutputStream.createArchiveEntry(Path, String, LinkOption...). + Thanks to Gary Gregory. +o Add ctor TarArchiveEntry(Path, String, LinkOption...). + Thanks to Gary Gregory. +o Add IOUtils.EMPTY_LINK_OPTIONS. + Thanks to Gary Gregory. +o Add Path support to ZipArchiveOutputStream #123. + Thanks to Gary Gregory. +o Some minor improvements. + Github Pull Request #157. + Issue: COMPRESS-561. + Thanks to Arturo Bernal. +o Update from Java 7 to 8. +o Update GitHub actions/checkout from v1 to v2.3.4, #114, #124, #139, #150. + Thanks to Dependabot. +o Update actions/setup-java from v1.4.0 to v2, #125, #133, #141. + Thanks to Dependabot, Gary Gregory. +o Update com.github.luben:zstd-jni from 1.4.4-7 to 1.5.0-2, #118, #159, #173, #174, #203. + Thanks to Dependabot, Gary Gregory. +o Update tests slf4j-api from 1.7.26 to 1.7.30 #117. + Thanks to Dependabot. +o Update maven-pmd-plugin from 3.12.0 to 3.14.0, #115, #154. + Thanks to Dependabot. +o Update maven-bundle-plugin from 3.5.1 to 5.1.2 #116, #180. + Thanks to Dependabot. +o Bump memoryfilesystem from 1.3.0 to 2.1.0 #131. + Thanks to Dependabot. +o Bump actions/cache from v2 to v2.1.6, #164, #200. + Thanks to Dependabot. +o Bump junit from 4.13 to 4.13.2, #143, #167. + Thanks to Dependabot. +o Bump mockito-core from 1.10.19 to 3.11.1, #161, #170, #204. + Thanks to Dependabot. +o Bump commons.jacoco.version from 0.8.5 to 0.8.7 (Java 16 builds). + Thanks to Gary Gregory. +o Bump org.apache.felix:org.apache.felix.framework from 6.0.3 to 7.0.0 (Java 16 builds). + Thanks to Gary Gregory. +o Bump commons.japicmp.version from 0.14.3 to 0.15.3 (Java 16 builds). + Thanks to Gary Gregory. +o Bump commons.javadoc.version from 3.2.0 to 3.3.0. + Thanks to Gary Gregory. +o Update com.github.luben:zstd-jni from 1.4.8-7 to 1.4.9-1 #176. + Thanks to Dependabot. +o Update org.tukaani:xz from 1.8 to 1.9 +o Some minor improvements. + Github Pull Request #193. + Issue: COMPRESS-577. + Thanks to Arturo Bernal. +o Java8 improvements. + Github Pull Request #194. + Issue: COMPRESS-578. + Thanks to Arturo Bernal. +o Remove redundant local variable. + Github Pull Request #195. + Issue: COMPRESS-579. + Thanks to Arturo Bernal. +o Remove redundant operation + Github Pull Request #196. + Issue: COMPRESS-580. + Thanks to Arturo Bernal. + +Release 1.20 +------------ + +Commons Compress 1.20 like any version of Commons Compress since 1.3 +can not be built from sources using Java 14 as Java 14 removes +support for the Pack200 format. We will address this issue with the +next release. + +Fixed Bugs: +o SevenZFile could throw NullPointerException rather than + IOException for certain archives. In addition it now handles + certain empty archives more gracefully. + Issue: COMPRESS-492. +o Deflate64CompressorInputStream.read would return 0 for some + inputs in violation of the InputStream.read contract. + Issue: COMPRESS-491. +o SeekableInMemoryByteChannel's truncate didn't set position + according to the spec in an edge case. + Issue: COMPRESS-499. +o BZip2CompressorInputStream now incorporates a similar patch as + the one that fixed CVE-2019-12900 in libbzip2. + + Commons Compress has not been vulnerable to this CVE as it + would have rejected a file with too many selectors. With this + patch Commons Compress will be able to read certain archives + that would have caused errors in Compress 1.19. Thanks to Joseph Allemandou. + +Changes: +o Update optional library com.github.luben:zstd-jni from + 1.4.0-1 to 1.4.4-7. + Issue: COMPRESS-493. +o Update tests from org.apache.felix:org.apache.felix.framework + 6.0.2 to 6.0.3. +o SevenZFile can now recover from a certain corruption that + seems to happen occasionally when split archives are created. + Issue: COMPRESS-497. + Thanks to Stefan Schlott. +o Added random access support to SevenZFile. + Issue: COMPRESS-342. + Thanks to Peter Alfred Lee. +o Added support for split ZIP archives. + Issue: COMPRESS-477. + Thanks to Peter Alfred Lee. +o Added support for reading sparse entries to the TAR package. + Issue: COMPRESS-124. + Thanks to Peter Alfred Lee. +o Update JUnit from 4.12 to 4.13. + +Removed: +o Removed the extraction code from the example CLI class inside + of the SevenZ package. Not only is it superseeded by the + examples package, its implementation was vulnerable to the + ZipSlip attack. + Issue: COMPRESS-495. + +Release 1.19 +------------ + +ZipArchiveInputStream and ZipFile will no longer throw an exception if +an extra field generally understood by Commons Compress is malformed +but rather turn them into UnrecognizedExtraField instances. You can +influence the way extra fields are parsed in more detail by using the +new getExtraFields(ExtraFieldParsingBehavior) method of +ZipArchiveEntry now. + +Some of the ZIP extra fields related to strong encryption will now +throw ZipExceptions rather than ArrayIndexOutOfBoundsExceptions in +certain cases when used directly. There is no practical difference +when they are read via ZipArchiveInputStream or ZipFile. + +New features: +o It is now possible to skip parsing of local file headers when + using ZipFile which may speed up reading the archive at the + cost of potentially missing important information. See the + javadocs of the ZipFile class for details. + Issue: COMPRESS-466. +o TarArchiveInputStream has a new constructor-arg lenient that + can be used to accept certain broken archives. + Issue: COMPRESS-469. +o ArjArchiveEntry and SevenZArchiveEntry now implement hashCode + and equals. + Issue: COMPRESS-475. +o Added a MultiReadOnlySeekableByteChannel class + that can be used to concatenate the parts of a multi volume 7z + archive so that SevenZFile can read them. + Issue: COMPRESS-231. + Thanks to Tim Underwood. + +Fixed Bugs: +o ZipArchiveInputStream could forget the compression level has + changed under certain circumstances. +o Fixed another potential resource leak in + ParallelScatterZipCreator#writeTo. + Issue: COMPRESS-470. +o ArArchiveInputStream could think it had hit EOF prematurely. + Github Pull Request #74. + Thanks to Alex Bertram. +o Throw IOException rather than RuntimeExceptions for certain + malformed LZ4 or Snappy inputs. + Issue: COMPRESS-490. +o ZipArchiveInputStream failed to read stored entries with a + data descriptor if the data descriptor didn't use the + signature invented by InfoZIP. + Issue: COMPRESS-482. + +Changes: +o SevenZFile now provides a way to cap memory consumption for + LZMA(2) compressed content. + Github Pull Request #76. + Issue: COMPRESS-481. + Thanks to Robin Schimpf. +o The ARJ package has been updated to contain constants for more + recent specifications. + Issue: COMPRESS-464. + Thanks to Rostislav Krasny. +o Update optional library zstd-jni from 1.3.3-3 to 1.4.0-1. + Issue: COMPRESS-484. +o ParallelScatterZipCreator now writes the entries to the + gathered output in the same order they have been added. + Github Pull Requests #78 and #79. + Issue: COMPRESS-485. + Thanks to Hervé Boutemy, Tibor Digana. +o The Expander and Archive example classes can leak resources + they have wrapped around passed in streams or channels. The + methods consuming streams and channels have been adapted to + give the calling code a chance to deal with those wrapper + resources. + Issue: COMPRESS-486. +o ZipArchiveInputStream and ZipFile no longer assume Commons + Compress would understand extra fields better than the writer + of the archive and silently turn extra fields that Commons + Compress should understand into UnrecognizedExtraFields if + parsing said fields fails. + It is now possible to take more control over the extra field + parsing process with a new overload of + ZipArchiveEntry#getExtraFields. + Issue: COMPRESS-479. +o ZipArchiveInputStream will now throw an exception if reading a + stored entry with a data descriptor and the data descriptor + doesn't match what it has actually read. + + The most common case for a situation like this is a stored ZIP + archive inside of the archive ZipArchiveInputStream currently + reads. In such a case ZipArchiveInputStream would happily + extract the contained archive and stop once the central + directory of the inner archive has been hit. This is a case + where ZipArchiveInputStream simply can not be used and only + ZipFile is able to read the archive. + + The only other explanation is a broken archive. So the + exception prevents users from thinking they had successfully + read the contents of the archive. + Issue: COMPRESS-483. +o The 7zip tools provide a default name for archive entries + without name; SevenZFile returns a null name for such + entries. A new method getDefaultName has been added to derive + the same name the 7zip tools would use and an option has been + added that sets SevenZArchiveEntry's name to the default name + if it is not contained inside the archive. + Issue: COMPRESS-478. + +Release 1.18 +------------ + +This release changes the OSGi Manifest entry Bundle-SymbolicName from +org.apache.commons.compress to org.apache.commons.commons-compress. + +New features: +o It is now possible to specify the arguments of zstd-jni's + ZstdOutputStream constructors via Commons Compress as well. + Issue: COMPRESS-460. + Thanks to Carmi Grushko. + +Fixed Bugs: +o The example Expander class has been vulnerable to a path + traversal in the edge case that happens when the target + directory has a sibling directory and the name of the target + directory is a prefix of the sibling directory's name. + Thanks to Didier Loiseau. +o Changed the OSGi Import-Package to also optionally import + javax.crypto so encrypted archives can be read. + Issue: COMPRESS-456. +o Changed various implementations of the close method to better + ensure all held resources get closed even if exceptions are + thrown during the closing the stream. + Issue: COMPRESS-457. +o ZipArchiveInputStream can now detect the APK Signing Block + used in signed Android APK files and treats it as an "end of + archive" marker. + Issue: COMPRESS-455. +o The cpio streams didn't handle archives using a multi-byte + encoding properly. + Issue: COMPRESS-459. + Thanks to Jens Reimann. +o ZipArchiveInputStream#read would silently return -1 on a + corrupted stored entry and even return > 0 after hitting the + end of the archive. + Issue: COMPRESS-463. +o ArArchiveInputStream#read would allow to read from the stream + without opening an entry at all. + Issue: COMPRESS-462. + +Release 1.17 +------------ + +New features: +o Added a unit test that is supposed to fail if we break the + OSGi manifest entries again. + Issue: COMPRESS-443. +o Add a new SkipShieldingInputStream class that can be used with + streams that throw an IOException when skip is invoked. + Issue: COMPRESS-449. +o New constructors have been added to SevenZFile that accept + char[]s rather than byte[]s in order to avoid a common error + of using the wrong encoding when creating the byte[]. This + change may break source compatibility for client code that + uses one of the constructors expecting a password and passes + in null as password. We recommend to change the code to use a + constructor without password argument. + Issue: COMPRESS-452. + +Fixed Bugs: +o Removed the objenesis dependency from the pom as it is not + needed at all. +o Fixed resource leak in ParallelScatterZipCreator#writeTo. + Issue: COMPRESS-446. +o Certain errors when parsing ZIP extra fields in corrupt + archives are now turned into ZipException, they used to + manifest as ArrayIndexOutOfBoundsException before. + Issue: COMPRESS-447. +o IOUtils.copy now verifies the buffer size is bigger than 0. + Issue: COMPRESS-451. +o ZipArchiveInputStream failed to read some files with stored + entries using a data descriptor. + Issue: COMPRESS-454. + +Changes: +o Fixed some code examples. + Github Pull Request #63. + Thanks to Marchenko Sergey. +o The streams returned by ZipFile and most other decompressing + streams now provide information about the number of compressed + and uncompressed bytes read so far. This may be used to detect + a ZipBomb if the compression ratio exceeds a certain + threshold, for example. + For SevenZFile a new method returns the statistics for the + current entry. + Issue: COMPRESS-445. + Thanks to Andreas Beeker. +o Added a workaround for a bug in AdoptOpenJDK for S/390 to + BZip2CompressorInputStream. + Issue: COMPRESS-453. + +Release 1.16.1 +-------------- + +Fixed Bug: +o Fixed the OSGi manifest entry for imports that has been broken + in 1.16. + Issue: COMPRESS-442. + +Release 1.16 +------------ + +New features: +o Add read-only support for Zstandard compression based on the + Zstd-jni project. + Issue: COMPRESS-423. Thanks to Andre F de Miranda. +o Added auto-detection for Zstandard compressed streams. + Issue: COMPRESS-425. +o Added write-support for Zstandard compression. + Issue: COMPRESS-426. +o Added read-only DEFLATE64 support to ZIP archives and as + stand-alone CompressorInputStream. + Issue: COMPRESS-380. Thanks to Christian Marquez Grabia. +o Added read-only DEFLATE64 support to 7z archives. + Issue: COMPRESS-437. + +Fixed Bugs: +o Synchronized iteration over a synchronizedList in + ParallelScatterZipCreator. + Issue: COMPRESS-430. Thanks to Bruno P. Kinoshita. +o ZipFile could get stuck in an infinite loop when parsing ZIP + archives with certain strong encryption headers. + Issue: COMPRESS-432. +o Added improved checks to detect corrupted bzip2 streams and + throw the expected IOException rather than obscure + RuntimeExceptions. + Issue: COMPRESS-424. + +Changes: +o Replaces instanceof checks with a type marker in LZ77 support code. + Issue: COMPRESS-435. Thanks to BELUGA BEHR. +o Updated XZ for Java dependency to 1.8 in order to pick up bug fix + to LZMA2InputStream's available method. +o ZipArchiveEntry now exposes how the name or comment have been + determined when the entry was read. + Issue: COMPRESS-429. Thanks to Damiano Albani. +o ZipFile.getInputStream will now always buffer the stream + internally in order to improve read performance. + Issue: COMPRESS-438. +o Speed improvement for DEFLATE64 decompression. + Issue: COMPRESS-440. Thanks to Dawid Weiss. +o Added a few extra sanity checks for the rarer compression + methods used in ZIP archives. + Issue: COMPRESS-436. +o Simplified the special handling for the dummy byte required by + zlib when using java.util.zip.Inflater. + Issue: COMPRESS-441. +o Various code cleanups. + Github Pull Request #61. Thanks to Shahab Kondri. +o TarArchiveEntry's preserveLeadingSlashes constructor argument + has been renamed and can now also be used to preserve the + drive letter on Windows. + +Release 1.15 +------------ + +New features: +o Added magic MANIFEST entry Automatic-Module-Name so the module + name will be org.apache.commons.compress when the jar is used + as an automatic module in Java9. + Issue: COMPRESS-397. +o Added a new utility class FixedLengthBlockOutputStream that + can be used to ensure writing always happens in blocks of a + given size. + Issue: COMPRESS-405. Thanks to Simon Spero. +o It is now possible to specify/read custom PAX headers when + writing/reading tar archives. + Issue: COMPRESS-400. Thanks to Simon Spero. + +Fixed Bugs: +o Make sure "version needed to extract" in local file header and + central directory of a ZIP archive agree with each other. + Also ensure the version is set to 2.0 if DEFLATE is used. + Issue: COMPRESS-394. +o Don't use a data descriptor in ZIP archives when copying a raw + entry that already knows its size and CRC information. + Issue: COMPRESS-395. +o Travis build redundantly repeats compilation and tests redundantly + GitHub Pull Request #43. Thanks to Simon Spero. + Issue: COMPRESS-413 +o The MANIFEST of 1.14 lacks an OSGi Import-Package for XZ for + Java. + Issue: COMPRESS-396. +o BUILDING.md now passes the RAT check. + Issue: COMPRESS-406. Thanks to Simon Spero. +o Made sure ChecksumCalculatingInputStream receives valid + checksum and input stream instances via the constructor. + Issue: COMPRESS-412. Thanks to Michael Hausegger. +o TarArchiveOutputStream now verifies the block and record sizes + specified at construction time are compatible with the tar + specification. In particular 512 is the only record size + accepted and the block size must be a multiple of 512. + Issue: COMPRESS-407. Thanks to Simon Spero. +o Fixed class names of CpioArchiveEntry and + CpioArchiveInputStream in various Javadocs. + Issue: COMPRESS-415. +o The code of the extended timestamp zip extra field incorrectly + assumed the time was stored as unsigned 32-bit int and thus + created incorrect results for years after 2037. + Issue: COMPRESS-416. Thanks to Simon Spero. +o Removed ZipEncoding code that became obsolete when we started + to require Java 5 as baseline long ago. + Issue: COMPRESS-410. Thanks to Simon Spero. +o The tar package will no longer try to parse the major and + minor device numbers unless the entry represents a character + or block special file. + Issue: COMPRESS-417. +o When reading tar headers with name fields containing embedded + NULs, the name will now be terminated at the first NUL byte. + Issue: COMPRESS-421. Thanks to Roel Spilker. +o Simplified TarArchiveOutputStream by replacing the internal + buffering with new class FixedLengthBlockOutputStream. + Issue: COMPRESS-409. + +Release 1.14 +------------ + +New features: +o Added write support for Snappy. + Issue: COMPRESS-246. +o Added support for LZ4 (block and frame format). + Issue: COMPRESS-271. +o Add static detect(InputStream in) to CompressorStreamFactory + and ArchiveStreamFactory + Issue: COMPRESS-385. +o Added a way to limit amount of memory ZCompressorStream may + use. + Issue: COMPRESS-382. Thanks to Tim Allison. +o Added a way to limit amount of memory ZCompressorStream may + use. + Issue: COMPRESS-386. Thanks to Tim Allison. +o Added a way to limit amount of memory LZMACompressorStream and + XZCompressorInputStream may use. + Issue: COMPRESS-382. Thanks to Tim Allison. +o Add Brotli decoder based on the Google Brotli library. + Issue: COMPRESS-392. Thanks to Philippe Mouawad. +o ZipEntry now exposes its data offset. + Issue: COMPRESS-390. Thanks to Zbynek Vyskovsky. +o Using ZipArchiveEntry's setAlignment it is now possible to + ensure the data offset of an entry starts at a file position + that at word or page boundaries. + A new extra field has been added for this purpose. + Issue: COMPRESS-391. Thanks to Zbynek Vyskovsky. + +Fixed Bugs: +o SnappyCompressorInputStream slides the window too early + leading to ArrayIndexOutOfBoundsExceptions for some streams. + Issue: COMPRESS-378. +o ZipArchiveEntry#isUnixSymlink now only returns true if the + corresponding link flag is the only file-type flag set. + Issue: COMPRESS-379. Thanks to Guillaume Boué. +o Fixed an integer overflow in CPIO's CRC calculation. + Pull Request #17. Thanks to Daniel Collin. +o Make unit tests work on Windows paths with spaces in their names. + Issue: COMPRESS-387. +o Internal location pointer in ZipFile could get incremented + even if nothing had been read. + Issue: COMPRESS-389. +o LZMACompressorOutputStream#flush would throw an exception + rather than be the NOP it promised to be. + Issue: COMPRESS-393. + +Changes: +o The blocksize for FramedSnappyCompressorInputStream can now be + configured as some IWA files seem to be using blocks larger + than the default 32k. + Issue: COMPRESS-358. +o BZip2CompressorInputstream now uses BitInputStream internally. + Pull Request #13. Thanks to Thomas Meyer. +o Improved performance for concurrent reads from ZipFile when + reading from a file. + Issue: COMPRESS-388. Thanks to Zbynek Vyskovsky. + +Release 1.13 +------------ + +Commons Compress 1.13 is the first version to require Java 7 at +runtime. + +Changes in this version include: + +New features: +o SevenZFile, SevenZOutputFile, ZipFile and + ZipArchiveOutputStream can now work on non-file resources if + they can be accessed via SeekableByteChannel. + Issue: COMPRESS-327. +o Allow compressor extensions through a standard JRE ServiceLoader. + Issue: COMPRESS-368. +o Allow archive extensions through a standard JRE ServiceLoader. + Issue: COMPRESS-369. +o Add write support for the legacy LZMA format, this requires XZ + for Java 1.6. + Issue: COMPRESS-373. +o Add write support for the legacy LZMA stream to 7z, this + requires XZ for Java 1.6. + Issue: COMPRESS-374. +o Allow the clients of ParallelScatterZipCreator to provide + ZipArchiveEntryRequestSupplier. + Issue: COMPRESS-375. Thanks to Plamen Totev. +o Add a version-independent link to the API docs of the latest + release. + Issue: COMPRESS-372. + +Fixed Bugs: +o BitInputStream could return bad results when overflowing + internally - if two consecutive reads tried to read more than + 64 bits. + Issue: COMPRESS-363. +o ZipArchiveInputStream.closeEntry does not properly advance to + next entry if there are junk bytes at end of data section. + Issue: COMPRESS-364. Thanks to Mike Mole. +o ZipArchiveInputStream now throws an Exception if it encounters + a broken ZIP archive rather than signaling end-of-archive. + Issue: COMPRESS-367. Thanks to Mike Mole. +o ScatterZipOutputStream didn't close the StreamCompressor + causing a potential resource leak. + Issue: COMPRESS-377. + +Changes: +o Update Java requirement from 6 to 7. + Issue: COMPRESS-360. +o Clarified which TarArchiveEntry methods are useless for + entries read from an archive. + Issue: COMPRESS-366. + +Release 1.12 +------------ + +Commons Compress 1.12 is the first version to require Java 6 at +runtime. + +Release 1.12 changes the behavior of BZip2CompressorOutputStream's +finalize method so that it no longer invokes finish. This is going to +break code that relied on the finalizer to clean up an unfinished +stream. The code will need to be changed to call finish or close +itself. Note that a finalizer is not guaranteed to run, so the feature +was not 100% effective in any case. + +New features: + +o FramedSnappyCompressorInputStream now supports the dialect of + Snappy used by the IWA files contained within the zip archives + used in Apple's iWork 13 files. + Issue: COMPRESS-352. + +Fixed Bugs: + +o SevenZFile.read() throws an IllegalStateException for empty entries. + Issue: COMPRESS-348. +o TarArchiveInputStream failed to parse PAX headers that included + blank lines. + Issue: COMPRESS-355. Thanks to Jeremy Gustie. +o TarArchiveInputStream failed to parse PAX headers whose tar entry + name ended with a slash. + Issue: COMPRESS-356. Thanks to Jeremy Gustie. + +Changes: +o Update requirement from Java 5 to 6. + Issue: COMPRESS-349. +o TarArchiveEntry wastefully allocates empty arrays. + Issue: COMPRESS-350. +o Javadoc for BZip2CompressorInputStream(InputStream, boolean) should + refer to IOEx, not NPE. + Issue: COMPRESS-353. +o PureJavaCrc32C in the snappy package is now final so it is now safe + to call a virtual method inside the constructor. + Issue: COMPRESS-354. + +o ZipArchiveInputStream and CpioArchiveInputStream could throw + exceptions who's messages contained potentially corrupt entry names + read from a broken archive. They will now sanitize the names by + replacing unprintable characters and restricting the length to 255 + characters. + Issue: COMPRESS-351. +o BZip2CompressorOutputStream no longer tries to finish the output + stream in finalize. This is a breaking change for code that relied + on the finalizer. + Issue: COMPRESS-357. + + +Release 1.11 +------------ + +New features: +o TarArchiveInputStream now supports reading global PAX headers. + Issue: COMPRESS-347. +o The PAX headers for sparse entries written by star are now + applied. + Issue: COMPRESS-346. +o GNU sparse files using one of the PAX formats are now + detected, but cannot be extracted. + Issue: COMPRESS-345. +o New method SevenZFile.getEntries can be used to list the + contents of a 7z archive. + Issue: COMPRESS-341. +o When using Zip64Mode.Always also use ZIP64 extensions inside + the central directory. + GitHub Pull Request #10 Thanks to Matt Hovey. +o ZipFile.getRawInputStream() is now part of the public API + Issue: COMPRESS-323. +o Allow byte-for-byte replication of Zip entries. + GitHub Pull Request #6. Thanks to Jason van Zyl. +o TarArchiveEntry's preserveLeadingSlashes is now a property and used + on later calls to setName, too. + This behavior is a breaking change. + Issue: COMPRESS-328. +o Added read-only support for bzip2 compression used inside of + ZIP archives. + GitHub Pull Request #4. Thanks to Sören Glimm. + +Fixed Bugs: +o ArArchiveInputStream can now read GNU extended names that are + terminated with a NUL byte rather than a linefeed. + Issue: COMPRESS-344. +o Native Memory Leak in Sevenz-DeflateDecoder. + Issue: COMPRESS-343. Thanks to Rene Preissel. +o SevenZFile will now only try to drain an entry's content when + moving on to the next entry if data is read from the next + entry. This should improve performance for applications that + try to skip over entries. + Issue: COMPRESS-340. Thanks to Dawid Weiss. +o file names of tar archives using the xstar format are now + parsed properly. + Issue: COMPRESS-336. +o checksums of tars that pad the checksum field to the left are + now calculated properly. + Issue: COMPRESS-335. +o ArArchiveInputStream failed to read past the first entry when + BSD long names have been used. + Issue: COMPRESS-334. Thanks to Jeremy Gustie. +o Added buffering for random access which speeds up 7Z support. + Issue: COMPRESS-333. Thanks to Dawid Weiss. +o The checksum validation of TararchiveEntry is now as strict as + the validation of GNU tar, which eliminates a few cases of + false positives of ArchiveStreamFactory. + This behavior is a breaking change since the check has become + more strict but any archive that fails the checksum test now + would also fail it when extracted with other tools and must be + considered an invalid archive. + Issue: COMPRESS-331. +o SnappyCompressorInputStream and + FramedSnappyCompressorInputStream returned 0 at the end of the + stream under certain circumstances. + Issue: COMPRESS-332. +o Adjusted unit test to updates in Java8 and later that change + the logic of ZipEntry#getTime. + Issue: COMPRESS-326. +o TarArchiveOutputStream will now recognize GNU long name and + link entries even if the special entry has a different name + than GNU tar uses itself. This seems to be the case for + archives created by star. + Issue: COMPRESS-324. +o ArrayIndexOutOfBoundsException when InfoZIP type 7875 extra + fields are read from the central directory. + Issue: COMPRESS-321. + +Release 1.10 +------------ + +Release 1.10 moves the former +org.apache.commons.compress.compressors.z._internal_ package which +breaks backwards compatibility for code which used the old package. + +This also changes the superclass of ZCompressorInputStream which makes +this class binary incompatible with the one of Compress 1.9. Code +that extends ZCompressorInputStream will need to be recompiled in +order to work with Compress 1.10. + +New features: +o CompressorStreamFactory can now auto-detect DEFLATE streams + with ZLIB header. + Issue: COMPRESS-316. Thanks to Nick Burch. +o CompressorStreamFactory can now auto-detect LZMA streams. + Issue: COMPRESS-313. +o Added support for parallel compression. This low-level API allows + a client to build a zip/jar file by using the class + org.apache.commons.compress.archivers.zip.ParallelScatterZipCreator. + + Zip documentation updated with further notes about parallel features. + + Please note that some aspects of jar creation need to be + handled by client code and is not part of commons-compress for this + release. + Issue: COMPRESS-296. Thanks to Kristian Rosenvold. +o Cut overall object instantiation in half by changing file + header generation algorithm, for a 10-15 percent performance + improvement. + + Also extracted two private methods createLocalFileHeader + and createCentralFileHeader in ZipArchiveOutputStream. + These may have some interesting additional usages in the + near future. Thanks to Kristian Rosenvold. +o New methods in ZipArchiveOutputStream and ZipFile allows + entries to be copied from one archive to another without + having to re-compress them. + Issue: COMPRESS-295. Thanks to Kristian Rosenvold. + +Fixed Bugs: +o TarArchiveInputStream can now read entries with group or + user ids > 0x80000000. + Issue: COMPRESS-314. +o TarArchiveOutputStream can now write entries with group or + user ids > 0x80000000. + Issue: COMPRESS-315. +o TarArchiveEntry's constructor with a File and a String arg + didn't normalize the name. + Issue: COMPRESS-312. +o ZipEncodingHelper no longer reads system properties directly + to determine the default charset. + Issue: COMPRESS-308. +o BZip2CompressorInputStream#read would return -1 when asked to + read 0 bytes. + Issue: COMPRESS-309. +o ArchiveStreamFactory fails to pass on the encoding when creating + some streams. + * ArjArchiveInputStream + * CpioArchiveInputStream + * DumpArchiveInputStream + * JarArchiveInputStream + * TarArchiveInputStream + * JarArchiveOutputStream + Issue: COMPRESS-306. +o Restore immutability/thread-safety to ArchiveStreamFactory. + The class is now immutable provided that the method setEntryEncoding + is not used. The class is thread-safe. + Issue: COMPRESS-302. +o Restore immutability/thread-safety to CompressorStreamFactory. + The class is now immutable provided that the method + setDecompressConcatenated is not used. The class is thread-safe. + Issue: COMPRESS-303. +o ZipFile logs a warning in its finalizer when its constructor + has thrown an exception reading the file - for example if the + file doesn't exist. + Issue: COMPRESS-297. +o Improved error message when tar encounters a groupId that is + too big to write without using the STAR or POSIX format. + Issue: COMPRESS-290. Thanks to Kristian Rosenvold. +o SevenZFile now throws the specific PasswordRequiredException + when it encounters an encrypted stream but no password has + been specified. + Issue: COMPRESS-298. + +Changes: +o Moved the package + org.apache.commons.compress.compressors.z._internal_ to + org.apache.commons.compress.compressors.lzw and made it part + of the API that is officially supported. This will break + existing code that uses the old package. Thanks to Damjan Jovanovic. + +For complete information on Apache Commons Compress, including instructions +on how to submit bug reports, patches, or suggestions for improvement, +see the Apache Commons Compress website: + +https://commons.apache.org/compress/ + +Old Release Notes +================= + +Release 1.9 +----------- + +New features: +o Added support for DEFLATE streams without any gzip framing. + Issue: COMPRESS-263. + Thanks to Matthias Stevens. + +Fixed Bugs: +o When reading 7z files unknown file properties and properties of type + kDummy are now ignored. + Issue: COMPRESS-287. +o Expanding 7z archives using LZMA compression could cause an + EOFException. + Issue: COMPRESS-286. +o Long-Name and -link or PAX-header entries in TAR archives always had + the current time as last modfication time, creating archives that + are different at the byte level each time an archive was built. + Issue: COMPRESS-289. + Thanks to Bob Robertson. + +Changes: +o Checking for XZ for Java may be expensive. The result will now be + cached outside of an OSGi environment. You can use the new + XZUtils#setCacheXZAvailability to overrride this default behavior. + Issue: COMPRESS-285. + +Release 1.8.1 +------------- + +New features: +o COMPRESS-272: CompressorStreamFactory can now auto-detect Unix compress + (".Z") streams. + +Fixed Bugs: +o COMPRESS-270: The snappy, ar and tar inputstreams might fail to read from a + non-buffered stream in certain cases. +o COMPRESS-277: IOUtils#skip might skip fewer bytes than requested even though + more could be read from the stream. +o COMPRESS-276: ArchiveStreams now validate there is a current entry before + reading or writing entry data. +o ArjArchiveInputStream#canReadEntryData tested the current + entry of the stream rather than its argument. +o COMPRESS-274: ChangeSet#delete and deleteDir now properly deal with unnamed + entries. +o COMPRESS-273: Added a few null checks to improve robustness. +o COMPRESS-278: TarArchiveInputStream failed to read archives with empty + gid/uid fields. +o COMPRESS-279: TarArchiveInputStream now again throws an exception when it + encounters a truncated archive while reading from the last + entry. +o COMPRESS-280: Adapted TarArchiveInputStream#skip to the modified + IOUtils#skip method. Thanks to BELUGA BEHR. + +Changes: +o The dependency on org.tukaani:xz is now marked as optional. + +Release 1.8 +----------- + +New features: +o GzipCompressorInputStream now provides access to the same + metadata that can be provided via GzipParameters when writing + a gzip stream. + Issue: COMPRESS-260. +o SevenZOutputFile now supports chaining multiple + compression/encryption/filter methods and passing options to + the methods. + Issue: COMPRESS-266. +o The (compression) method(s) can now be specified per entry in + SevenZOutputFile. + Issue: COMPRESS-261. +o SevenZArchiveEntry "knows" which method(s) have been used to + write it to the archive. + Issue: COMPRESS-258. +o The 7z package now supports the delta filter as method. +o The 7z package now supports BCJ filters for several platforms. + You will need a version >= 1.5 of XZ for Java to read archives + using BCJ, though. + Issue: COMPRESS-257. + +Fixed Bugs: +o BZip2CompressorInputStream read fewer bytes than possible from + a truncated stream. + Issue: COMPRESS-253. +o SevenZFile failed claiming the dictionary was too large when + archives used LZMA compression for headers and content and + certain non-default dictionary sizes. + Issue: COMPRESS-253. +o CompressorStreamFactory.createCompressorInputStream with + explicit compression did not honor decompressConcatenated + Issue: COMPRESS-259. +o TarArchiveInputStream will now read archives created by tar + implementations that encode big numbers by not adding a + trailing NUL. + Issue: COMPRESS-262. +o ZipArchiveInputStream would return NUL bytes for the first 512 + bytes of a STORED entry if it was the very first entry of the + archive. + Issue: COMPRESS-264. +o When writing PAX/POSIX headers for TAR entries with + backslashes or certain non-ASCII characters in their name + TarArchiveOutputStream could fail. + Issue: COMPRESS-265. +o ArchiveStreamFactory now throws a StreamingNotSupported - a + new subclass of ArchiveException - if it is asked to read from + or write to a stream and Commons Compress doesn't support + streaming for the format. This currently only applies to the + 7z format. + Issue: COMPRESS-267. + +Release 1.7 +----------- + +New features: +o Read-Only support for Snappy compression. + Issue: COMPRESS-147. Thanks to BELUGA BEHR. +o Read-Only support for .Z compressed files. + Issue: COMPRESS-243. Thanks to Damjan Jovanovic. +o ZipFile and ZipArchiveInputStream now support reading entries + compressed using the SHRINKING method. Thanks to Damjan Jovanovic. +o GzipCompressorOutputStream now supports setting the compression + level and the header metadata (filename, comment, modification time, + operating system and extra flags) + Issue: COMPRESS-250. Thanks to Emmanuel Bourg. +o ZipFile and ZipArchiveInputStream now support reading entries + compressed using the IMPLODE method. + Issue: COMPRESS-115. Thanks to Emmanuel Bourg. +o ZipFile and the 7z file classes now implement Closeable and can be + used in try-with-resources constructs. + +Fixed Bugs: +o SevenZOutputFile#closeArchiveEntry throws an exception when using + LZMA2 compression on Java8. Issue: COMPRESS-241. +o 7z reading of big 64bit values could be wrong. + Issue: COMPRESS-244. Thanks to Nico Kruber. +o TarArchiveInputStream could fail to read an archive completely. + Issue: COMPRESS-245. +o The time-setters in X5455_ExtendedTimestamp now set the + corresponding flags explicitly - i.e. they set the bit if the valus + is not-null and reset it otherwise. This may cause + incompatibilities if you use setFlags to unset a bit and later set + the time to a non-null value - the flag will now be set. + Issue: COMPRESS-242. +o SevenZOutputFile would create invalid archives if more than six + empty files or directories were included. Issue: COMPRESS-252. + +Release 1.6 +----------- + +Version 1.6 introduces changes to the internal API of the tar package that +break backwards compatibility in the following rare cases. This version +removes the package private TarBuffer class along with the protected "buffer" +members in TarArchiveInputStream and TarArchiveOutputStream. This change will +only affect you if you have created a subclass of one of the stream classes +and accessed the buffer member or directly used the TarBuffer class. + +Changes in this version include: + +New features: +o Added support for 7z archives. Most compression algorithms + can be read and written, LZMA and encryption are only + supported when reading. Issue: COMPRESS-54. Thanks to Damjan Jovanovic. +o Added read-only support for ARJ archives that don't use + compression. Issue: COMPRESS-226. Thanks to Damjan Jovanovic. +o DumpArchiveInputStream now supports an encoding parameter that + can be used to specify the encoding of file names. +o The CPIO streams now support an encoding parameter that can be + used to specify the encoding of file names. +o Read-only support for LZMA standalone compression has been added. + Issue: COMPRESS-111. + +Fixed Bugs: +o TarBuffer.tryToConsumeSecondEOFRecord could throw a + NullPointerException Issue: COMPRESS-223. Thanks to Jeremy Gustie. +o Parsing of zip64 extra fields has become more lenient in order + to be able to read archives created by DotNetZip and maybe + other archivers as well. Issue: COMPRESS-228. +o TAR will now properly read the names of symbolic links with + long names that use the GNU variant to specify the long file + name. Issue: COMPRESS-229. Thanks to Christoph Gysin. +o ZipFile#getInputStream could return null if the archive + contained duplicate entries. + The class now also provides two new methods to obtain all + entries of a given name rather than just the first one. + Issue: COMPRESS-227. +o CpioArchiveInputStream failed to read archives created by + Redline RPM. Issue: COMPRESS-236. Thanks to Andrew Duffy. +o TarArchiveOutputStream now properly handles link names that + are too long to fit into a traditional TAR header. Issue: + COMPRESS-237. Thanks to Emmanuel Bourg. +o The auto-detecting create*InputStream methods of Archive and + CompressorStreamFactory could fail to detect the format of + blocking input streams. Issue: COMPRESS-239. + +Changes: +o Readabilty patch to TarArchiveInputStream. Issue: + COMPRESS-232. Thanks to BELUGA BEHR. +o Performance improvements to TarArchiveInputStream, in + particular to the skip method. Issue: COMPRESS-234. Thanks to + BELUGA BEHR. + +Release 1.5 +----------- + +New features: + +o CompressorStreamFactory has an option to create decompressing + streams that decompress the full input for formats that support + multiple concatenated streams. + Issue: COMPRESS-220. + +Fixed Bugs: + +o Typo in CompressorStreamFactory Javadoc + Issue: COMPRESS-218. + Thanks to Gili. +o ArchiveStreamFactory's tar stream detection created false positives + for AIFF files. + Issue: COMPRESS-191. + Thanks to Jukka Zitting. +o XZ for Java didn't provide an OSGi bundle. Compress' dependency on + it has now been marked optional so Compress itself can still be used + in an OSGi context. + Issue: COMPRESS-199. + Thanks to Jukka Zitting. +o When specifying the encoding explicitly TarArchiveOutputStream would + write unreadable names in GNU mode or even cause errors in POSIX + mode for file names longer than 66 characters. + Issue: COMPRESS-200. + Thanks to Christian Schlichtherle. +o Writing TAR PAX headers failed if the generated entry name ended + with a "/". + Issue: COMPRESS-203. +o ZipArchiveInputStream sometimes failed to provide input to the + Inflater when it needed it, leading to reads returning 0. + Issue: COMPRESS-189. + Thanks to Daniel Lowe. +o TarArchiveInputStream ignored the encoding for GNU long name + entries. + Issue: COMPRESS-212. +o TarArchiveInputStream could leave the second EOF record inside the + stream it had just finished reading. + Issue: COMPRESS-206. + Thanks to Peter De Maeyer. +o DumpArchiveInputStream no longer implicitly closes the original + input stream when it reaches the end of the archive. +o ZipArchiveInputStream now consumes the remainder of the archive when + getNextZipEntry returns null. +o Unit tests could fail if the source tree was checked out to a + directory tree containign spaces. + Issue: COMPRESS-205. + Thanks to Daniel Lowe. +o Fixed a potential ArrayIndexOutOfBoundsException when reading STORED + entries from ZipArchiveInputStream. + Issue: COMPRESS-219. +o CompressorStreamFactory can now be used without XZ for Java being + available. + Issue: COMPRESS-221. + +Changes: + +o Improved exception message if a zip archive cannot be read because + of an unsupported compression method. + Issue: COMPRESS-188. + Thanks to Harald Kuhn. +o ArchiveStreamFactory has a setting for file name encoding that sets + up encoding for ZIP and TAR streams. + Issue: COMPRESS-192. + Thanks to Jukka Zitting. +o TarArchiveEntry now has a method to verify its checksum. + Issue: COMPRESS-191. + Thanks to Jukka Zitting. +o Split/spanned ZIP archives are now properly detected by + ArchiveStreamFactory but will cause an + UnsupportedZipFeatureException when read. +o ZipArchiveInputStream now reads archives that start with a "PK00" + signature. Archives with this signatures are created when the + archiver was willing to split the archive but in the end only needed + a single segment - so didn't split anything. + Issue: COMPRESS-208. +o TarArchiveEntry has a new constructor that allows setting linkFlag + and preserveLeadingSlashes at the same time. + Issue: COMPRESS-201. +o ChangeSetPerformer has a new perform overload that uses a ZipFile + instance as input. + Issue: COMPRESS-159. +o Garbage collection pressure has been reduced by reusing temporary + byte arrays in classes. + Issue: COMPRESS-172. + Thanks to Thomas Mair. +o Can now handle zip extra field 0x5455 - Extended Timestamp. + Issue: COMPRESS-210. + Thanks to Julius Davies. +o handle zip extra field 0x7875 - Info Zip New Unix Extra Field. + Issue: COMPRESS-211. + Thanks to Julius Davies. +o ZipShort, ZipLong, ZipEightByteInteger should implement Serializable + Issue: COMPRESS-213. + Thanks to Julius Davies. +o better support for unix symlinks in ZipFile entries. + Issue: COMPRESS-214. + Thanks to Julius Davies. +o ZipFile's initialization has been improved for non-Zip64 archives. + Issue: COMPRESS-215. + Thanks to Robin Power. +o Updated XZ for Java dependency to 1.2 as this version provides + proper OSGi manifest attributes. + +Release 1.4.1 +------------- + +This is a security bugfix release, see +https://commons.apache.org/proper/commons-compress/security.html#Fixed_in_Apache_Commons_Compress_1.4.1 + +Fixed Bugs: + +o Ported libbzip2's fallback sort algorithm to + BZip2CompressorOutputStream to speed up compression in certain + edge cases. + +Release 1.4 +----------- + +New features: +o COMPRESS-156: Support for the XZ format has been added. + +Fixed Bugs: +o COMPRESS-183: The tar package now allows the encoding of file names to be + specified and can optionally use PAX extension headers to + write non-ASCII file names. + The stream classes now write (or expect to read) archives that + use the platform's native encoding for file names. Apache + Commons Compress 1.3 used to strip everything but the lower + eight bits of each character which effectively only worked for + ASCII and ISO-8859-1 file names. + This new default behavior is a breaking change. +o COMPRESS-184: TarArchiveInputStream failed to parse PAX headers that + contained non-ASCII characters. +o COMPRESS-178: TarArchiveInputStream throws IllegalArgumentException instead of IOException +o COMPRESS-179: TarUtils.formatLongOctalOrBinaryBytes() assumes the field will be 12 bytes long +o COMPRESS-175: GNU Tar sometimes uses binary encoding for UID and GID +o COMPRESS-171: ArchiveStreamFactory.createArchiveInputStream would claim + short text files were TAR archives. +o COMPRESS-164: ZipFile didn't work properly for archives using unicode extra + fields rather than UTF-8 filenames and the EFS-Flag. +o COMPRESS-169: For corrupt archives ZipFile would throw a RuntimeException in + some cases and an IOException in others. It will now + consistently throw an IOException. + +Changes: +o COMPRESS-182: The tar package can now write archives that use star/GNU/BSD + extensions or use the POSIX/PAX variant to store numeric + values that don't fit into the traditional header fields. +o COMPRESS-181: Added a workaround for a Bug some tar implementations that add + a NUL byte as first byte in numeric header fields. +o COMPRESS-176: Added a workaround for a Bug in WinZIP which uses backslashes + as path separators in Unicode Extra Fields. +o COMPRESS-131: ArrayOutOfBounds while decompressing bz2. Added test case - code already seems to have been fixed. +o COMPRESS-146: BZip2CompressorInputStream now optionally supports reading of + concatenated .bz2 files. +o COMPRESS-154: GZipCompressorInputStream now optionally supports reading of + concatenated .gz files. +o COMPRESS-16: The tar package can now read archives that use star/GNU/BSD + extensions for files that are longer than 8 GByte as well as + archives that use the POSIX/PAX variant. +o COMPRESS-165: The tar package can now write archives that use star/GNU/BSD + extensions for files that are longer than 8 GByte as well as + archives that use the POSIX/PAX variant. +o COMPRESS-166: The tar package can now use the POSIX/PAX variant for writing + entries with names longer than 100 characters. + +Release 1.3 +----------- + +Commons Compress 1.3 is the first version to require Java5 at runtime. + +Changes in this version include: + +New features: +o Support for the Pack200 format has been added. Issue: COMPRESS-142. +o Read-only support for the format used by the Unix dump(8) tool + has been added. Issue: COMPRESS-132. + +Fixed Bugs: +o BZip2CompressorInputStream's getBytesRead method always + returned 0. +o ZipArchiveInputStream and ZipArchiveOutputStream could leak + resources on some JDKs. Issue: COMPRESS-152. +o TarArchiveOutputStream's getBytesWritten method didn't count + correctly. Issue: COMPRESS-160. + +Changes: +o The ZIP package now supports Zip64 extensions. Issue: COMPRESS-36. +o The AR package now supports the BSD dialect of storing file + names longer than 16 chars (both reading and writing). + Issue: COMPRESS-144. + +Release 1.2 +----------- + +New features: +o COMPRESS-123: ZipArchiveEntry has a new method getRawName that provides the + original bytes that made up the name. This may allow user + code to detect the encoding. +o COMPRESS-122: TarArchiveEntry provides access to the flags that determine + whether it is an archived symbolic link, pipe or other + "uncommon" file system object. + +Fixed Bugs: +o COMPRESS-129: ZipArchiveInputStream could fail with a "Truncated ZIP" error + message for entries between 2 GByte and 4 GByte in size. +o COMPRESS-145: TarArchiveInputStream now detects sparse entries using the + oldgnu format and properly reports it cannot extract their + contents. +o COMPRESS-130: The Javadoc for ZipArchiveInputStream#skip now matches the + implementation, the code has been made more defensive. +o COMPRESS-140: ArArchiveInputStream fails if entries contain only blanks for + userId or groupId. Thanks to Trejkaz. +o COMPRESS-139: ZipFile may leak resources on some JDKs. +o COMPRESS-125: BZip2CompressorInputStream throws IOException if + underlying stream returns available() == 0. + Removed the check. +o COMPRESS-127: Calling close() on inputStream returned by + CompressorStreamFactory.createCompressorInputStream() + does not close the underlying input stream. +o COMPRESS-119: TarArchiveOutputStream#finish now writes all buffered + data to the stream + +Changes: +o ZipFile now implements finalize which closes the underlying + file. +o COMPRESS-117: Certain tar files not recognised by + ArchiveStreamFactory. + +Release 1.1 +----------- + +New features: +o COMPRESS-108: Command-line interface to list archive contents. + Usage: java -jar commons-compress-n.m.jar archive-name [zip|tar|etc] +o COMPRESS-109: Tar implementation does not support Pax headers + Added support for reading pax headers. + Note: does not support global pax headers +o COMPRESS-103: ZipArchiveInputStream can optionally extract data that used + the STORED compression method and a data descriptor. + Doing so in a stream is not safe in general, so you have to + explicitly enable the feature. By default the stream will + throw an exception if it encounters such an entry. +o COMPRESS-98: The ZIP classes will throw specialized exceptions if any + attempt is made to read or write data that uses zip features + not supported (yet). +o COMPRESS-99: ZipFile#getEntries returns entries in a predictable order - + the order they appear inside the central directory. + A new method getEntriesInPhysicalOrder returns entries in + order of the entry data, i.e. the order ZipArchiveInputStream + would see. +o The Archive*Stream and ZipFile classes now have + can(Read|Write)EntryData methods that can be used to check + whether a given entry's data can be read/written. + The method currently returns false for ZIP archives if an + entry uses an unsupported compression method or encryption. +o COMPRESS-89: The ZIP classes now detect encrypted entries. +o COMPRESS-97: Added autodetection of compression format to + CompressorStreamFactory. +o COMPRESS-95: Improve ExceptionMessages in ArchiveStreamFactory Thanks to Joerg Bellmann. +o A new constructor of TarArchiveEntry can create entries with + names that start with slashes - the default is to strip + leading slashes in order to create relative path names. +o ArchiveEntry now has a getLastModifiedDate method. +o COMPRESS-78: Add a BZip2Utils class modelled after GZipUtils Thanks to Jukka Zitting. + +Fixed Bugs: +o COMPRESS-72: Move acknowledgements from NOTICE to README +o COMPRESS-113: TarArchiveEntry.parseTarHeader() includes the trailing space/NUL when parsing the octal size +o COMPRESS-118: TarUtils.parseName does not properly handle characters outside the range 0-127 +o COMPRESS-107: ArchiveStreamFactory does not recognise tar files created by Ant +o COMPRESS-110: Support "ustar" prefix field, which is used when file paths are longer + than 100 characters. +o COMPRESS-100: ZipArchiveInputStream will throw an exception if it detects an + entry that uses a data descriptor for a STORED entry since it + cannot reliably find the end of data for this "compression" + method. +o COMPRESS-101: ZipArchiveInputStream should now properly read archives that + use data descriptors but without the "unofficial" signature. +o COMPRESS-74: ZipArchiveInputStream failed to update the number of bytes + read properly. +o ArchiveInputStream has a new method getBytesRead that should + be preferred over getCount since the later may truncate the + number of bytes read for big archives. +o COMPRESS-85: The cpio archives created by CpioArchiveOutputStream couldn't + be read by many existing native implementations because the + archives contained multiple entries with the same inode/device + combinations and weren't padded to a blocksize of 512 bytes. +o COMPRESS-73: ZipArchiveEntry, ZipFile and ZipArchiveInputStream are now + more lenient when parsing extra fields. +o COMPRESS-82: cpio is terribly slow. + Documented that buffered streams are needed for performance +o Improved exception message if the extra field data in ZIP + archives cannot be parsed. +o COMPRESS-17: Tar format unspecified - current support documented. +o COMPRESS-94: ZipArchiveEntry's equals method was broken for entries created + with the String-arg constructor. This lead to broken ZIP + archives if two different entries had the same hash code. Thanks to Anon Devs. +o COMPRESS-87: ZipArchiveInputStream could repeatedly return 0 on read() when + the archive was truncated. Thanks to Antoni Mylka. +o COMPRESS-86: Tar archive entries holding the file name for names longer + than 100 characters in GNU longfile mode didn't properly + specify they'd be using the "oldgnu" extension. +o COMPRESS-83: Delegate all read and write methods in GZip stream in order to + speed up operations. +o The ar and cpio streams now properly read and write last + modified times. +o COMPRESS-81: TarOutputStream can leave garbage at the end of the archive + +Changes: +o COMPRESS-112: ArArchiveInputStream does not handle GNU extended filename records (//) +o COMPRESS-105: Document that the name of an ZipArchiveEntry determines whether + an entry is considered a directory or not. + If you don't use the constructor with the File argument the entry's + name must end in a "/" in order for the entry to be known as a directory. +o COMPRESS-79: Move DOS/Java time conversions into Zip utility class. +o COMPRESS-75: ZipArchiveInputStream does not show location in file + where a problem occurred. + Propchange: dev/commons/compress/RELEASE-NOTES.txt ------------------------------------------------------------------------------ svn:eol-style = native Added: dev/commons/compress/binaries/commons-compress-1.21-bin.tar.gz ============================================================================== Binary file - no diff available. Propchange: dev/commons/compress/binaries/commons-compress-1.21-bin.tar.gz ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: dev/commons/compress/binaries/commons-compress-1.21-bin.tar.gz.asc ============================================================================== --- dev/commons/compress/binaries/commons-compress-1.21-bin.tar.gz.asc (added) +++ dev/commons/compress/binaries/commons-compress-1.21-bin.tar.gz.asc Fri Jul 9 17:06:02 2021 @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iHEEABEKADEWIQTOgHWiUVR77iSbwVGiEVrhX2uLcgUCYOiAOxMcYm9kZXdpZ0Bh +cGFjaGUub3JnAAoJEKIRWuFfa4tybXsAn0yqSTNYtvlNtJtLqvSVIFMAQNqLAJ4q +1olKeXNyuSb7rXpFzhIUG9DWRA== +=P4sM +-----END PGP SIGNATURE----- Added: dev/commons/compress/binaries/commons-compress-1.21-bin.tar.gz.sha512 ============================================================================== --- dev/commons/compress/binaries/commons-compress-1.21-bin.tar.gz.sha512 (added) +++ dev/commons/compress/binaries/commons-compress-1.21-bin.tar.gz.sha512 Fri Jul 9 17:06:02 2021 @@ -0,0 +1 @@ +4a162d12b9a49121ced958cfd643493020c219729bc8054ef80d70cd9245024288ea5fa32d98d4ca7e1e4d23ccab6afc140f11c00aa3acfc7d4518aa87365934 commons-compress-1.21-bin.tar.gz Added: dev/commons/compress/binaries/commons-compress-1.21-bin.zip ============================================================================== Binary file - no diff available. Propchange: dev/commons/compress/binaries/commons-compress-1.21-bin.zip ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: dev/commons/compress/binaries/commons-compress-1.21-bin.zip.asc ============================================================================== --- dev/commons/compress/binaries/commons-compress-1.21-bin.zip.asc (added) +++ dev/commons/compress/binaries/commons-compress-1.21-bin.zip.asc Fri Jul 9 17:06:02 2021 @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iHEEABEKADEWIQTOgHWiUVR77iSbwVGiEVrhX2uLcgUCYOiAPBMcYm9kZXdpZ0Bh +cGFjaGUub3JnAAoJEKIRWuFfa4ty/OgAnAufseWVx7whkADXQZ1UdS69J9L8AJ0Z +ctDPoC8sQlkoVg/crERdE2E4vQ== +=yPmF +-----END PGP SIGNATURE----- Added: dev/commons/compress/binaries/commons-compress-1.21-bin.zip.sha512 ============================================================================== --- dev/commons/compress/binaries/commons-compress-1.21-bin.zip.sha512 (added) +++ dev/commons/compress/binaries/commons-compress-1.21-bin.zip.sha512 Fri Jul 9 17:06:02 2021 @@ -0,0 +1 @@ +0bedef7d54eb5670ad8e95ed54688f0e0e640d6e5ed5dcf14d48ed218199374563a60885f8e6b6b0df3e45c917dd2e5ba711839bc45ffda8a13013571a1fd353 commons-compress-1.21-bin.zip Added: dev/commons/compress/source/commons-compress-1.21-src.tar.gz ============================================================================== Binary file - no diff available. Propchange: dev/commons/compress/source/commons-compress-1.21-src.tar.gz ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: dev/commons/compress/source/commons-compress-1.21-src.tar.gz.asc ============================================================================== --- dev/commons/compress/source/commons-compress-1.21-src.tar.gz.asc (added) +++ dev/commons/compress/source/commons-compress-1.21-src.tar.gz.asc Fri Jul 9 17:06:02 2021 @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iHEEABEKADEWIQTOgHWiUVR77iSbwVGiEVrhX2uLcgUCYOiAPBMcYm9kZXdpZ0Bh +cGFjaGUub3JnAAoJEKIRWuFfa4tyyNwAn1RAMciW7Os/lbwCiQ/RJ64GL+LSAKDB +7ZWg3nXsSSAnuN7K/3doWvLkLQ== +=iHWA +-----END PGP SIGNATURE----- Added: dev/commons/compress/source/commons-compress-1.21-src.tar.gz.sha512 ============================================================================== --- dev/commons/compress/source/commons-compress-1.21-src.tar.gz.sha512 (added) +++ dev/commons/compress/source/commons-compress-1.21-src.tar.gz.sha512 Fri Jul 9 17:06:02 2021 @@ -0,0 +1 @@ +8041371b491057435ca62390e70b30031e4d21e80c37d9cb922fdffa794b56aee3b5d60d8241e4db0cecc28c82dfdaafbe52b2175e26062da169fec8efbb17e1 commons-compress-1.21-src.tar.gz Added: dev/commons/compress/source/commons-compress-1.21-src.zip ============================================================================== Binary file - no diff available. Propchange: dev/commons/compress/source/commons-compress-1.21-src.zip ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: dev/commons/compress/source/commons-compress-1.21-src.zip.asc ============================================================================== --- dev/commons/compress/source/commons-compress-1.21-src.zip.asc (added) +++ dev/commons/compress/source/commons-compress-1.21-src.zip.asc Fri Jul 9 17:06:02 2021 @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iHEEABEKADEWIQTOgHWiUVR77iSbwVGiEVrhX2uLcgUCYOiAPBMcYm9kZXdpZ0Bh +cGFjaGUub3JnAAoJEKIRWuFfa4tyjFIAoNmco5RfOJUWoBe0zj9/lXiRBtTtAKC9 +LgBesLJo5XRBvzdzfVH8fbCiUA== +=IPvJ +-----END PGP SIGNATURE----- Added: dev/commons/compress/source/commons-compress-1.21-src.zip.sha512 ============================================================================== --- dev/commons/compress/source/commons-compress-1.21-src.zip.sha512 (added) +++ dev/commons/compress/source/commons-compress-1.21-src.zip.sha512 Fri Jul 9 17:06:02 2021 @@ -0,0 +1 @@ +e762b5ffa2ef11fffab394c05dc89c634df61bddeb021c7d00f28a8f63093f02ce16a1ea560a23819a12f6c39e7642dd19fb1e551ebf66b922fc19074a328c8a commons-compress-1.21-src.zip