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