1## Licensed to the Apache Software Foundation (ASF) under one 2## or more contributor license agreements. See the NOTICE file 3## distributed with this work for additional information 4## regarding copyright ownership. The ASF licenses this file 5## to you under the Apache License, Version 2.0 (the 6## "License"); you may not use this file except in compliance 7## with the License. You may obtain a copy of the License at 8## 9## http://www.apache.org/licenses/LICENSE-2.0 10## 11## Unless required by applicable law or agreed to in writing, 12## software distributed under the License is distributed on an 13## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14## KIND, either express or implied. See the License for the 15## specific language governing permissions and limitations 16## under the License. 17 ${project.name} RELEASE NOTES 18 19$introduction.replaceAll("(?<!\015)\012", " 20") 21 22## N.B. the available variables are described here: 23## http://maven.apache.org/plugins/maven-changes-plugin/examples/using-a-custom-announcement-template.html 24## Hack to improve layout: replace all pairs of spaces with a single new-line 25$release.description.replaceAll(" ", " 26") 27 28## Fix up indentation for multi-line action descriptions 29#macro ( indent ) 30#set($action=$action.replaceAll("(?m)^ +"," ")) 31#end 32#if ($release.getActions().size() == 0) 33No changes defined in this version. 34#else 35#if ($release.getActions('add').size() !=0) 36New features: 37#foreach($actionItem in $release.getActions('add')) 38## Use replaceAll to fix up LF-only line ends on Windows. 39#set($action=$actionItem.getAction().replaceAll("\n"," 40")) 41#indent() 42#if ($actionItem.getIssue()) 43#set($issue=$actionItem.getIssue()) 44#else 45#set($issue="") 46#end 47#if ($actionItem.getDueTo()) 48#set($dueto=$actionItem.getDueTo()) 49#else 50#set($dueto="") 51#end 52o ${action}## 53#if($!issue != "") 54 55 Issue: $issue. #if($!dueto != "")Thanks to $dueto. #end 56#else#if($!dueto != "") Thanks to $dueto. #end 57#end 58 59#set($issue="") 60#set($dueto="") 61#end 62#end 63 64#if ($release.getActions('fix').size() !=0) 65Fixed Bugs: 66#foreach($actionItem in $release.getActions('fix')) 67## Use replaceAll to fix up LF-only line ends on Windows. 68#set($action=$actionItem.getAction().replaceAll("\n"," 69")) 70#indent() 71#if ($actionItem.getIssue()) 72#set($issue=$actionItem.getIssue()) 73#else 74#set($issue="") 75#end 76#if ($actionItem.getDueTo()) 77#set($dueto=$actionItem.getDueTo()) 78#else 79#set($dueto="") 80#end 81o ${action}## 82#if($!issue != "") 83 84 Issue: $issue. #if($!dueto != "")Thanks to $dueto. #end 85#else#if($!dueto != "") Thanks to $dueto. #end 86#end 87 88#set($issue="") 89#set($dueto="") 90#end 91#end 92 93#if ($release.getActions('update').size() !=0) 94Changes: 95#foreach($actionItem in $release.getActions('update')) 96## Use replaceAll to fix up LF-only line ends on Windows. 97#set($action=$actionItem.getAction().replaceAll("\n"," 98")) 99#indent() 100#if ($actionItem.getIssue()) 101#set($issue=$actionItem.getIssue()) 102#else 103#set($issue="") 104#end 105#if ($actionItem.getDueTo()) 106#set($dueto=$actionItem.getDueTo()) 107#else 108#set($dueto="") 109#end 110o ${action}## 111#if($!issue != "") 112 113 Issue: $issue. #if($!dueto != "")Thanks to $dueto. #end 114#else#if($!dueto != "") Thanks to $dueto. #end 115#end 116 117#set($issue="") 118#set($dueto="") 119#end 120#end 121 122#if ($release.getActions('remove').size() !=0) 123Removed: 124#foreach($actionItem in $release.getActions('remove')) 125## Use replaceAll to fix up LF-only line ends on Windows. 126#set($action=$actionItem.getAction().replaceAll("\n"," 127")) 128#indent() 129#if ($actionItem.getIssue()) 130#set($issue=$actionItem.getIssue()) 131#else 132#set($issue="") 133#end 134#if ($actionItem.getDueTo()) 135#set($dueto=$actionItem.getDueTo()) 136#else 137#set($dueto="") 138#end 139o ${action}## 140#if($!issue != "") 141 142 Issue: $issue. #if($!dueto != "")Thanks to $dueto. #end 143#else#if($!dueto != "") Thanks to $dueto. #end 144#end 145 146#set($issue="") 147#set($dueto="") 148#end 149#end 150## End of main loop 151#end 152#macro ( fixurl $url ) 153$url.replaceAll("proper/commons-","") 154#end 155For complete information on ${project.name}, including instructions 156on how to submit bug reports, patches, or suggestions for improvement, 157see the ${project.name} website: 158 159#fixurl ( ${project.url} ) 160 161Old Release Notes 162================= 163 164Release 1.9 165----------- 166 167New features: 168o Added support for DEFLATE streams without any gzip framing. 169 Issue: COMPRESS-263. 170 Thanks to Matthias Stevens. 171 172Fixed Bugs: 173o When reading 7z files unknown file properties and properties of type 174 kDummy are now ignored. 175 Issue: COMPRESS-287. 176o Expanding 7z archives using LZMA compression could cause an 177 EOFException. 178 Issue: COMPRESS-286. 179o Long-Name and -link or PAX-header entries in TAR archives always had 180 the current time as last modfication time, creating archives that 181 are different at the byte level each time an archive was built. 182 Issue: COMPRESS-289. 183 Thanks to Bob Robertson. 184 185Changes: 186o Checking for XZ for Java may be expensive. The result will now be 187 cached outside of an OSGi environment. You can use the new 188 XZUtils#setCacheXZAvailability to overrride this default behavior. 189 Issue: COMPRESS-285. 190 191Release 1.8.1 192------------- 193 194New features: 195o COMPRESS-272: CompressorStreamFactory can now auto-detect Unix compress 196 (".Z") streams. 197 198Fixed Bugs: 199o COMPRESS-270: The snappy, ar and tar inputstreams might fail to read from a 200 non-buffered stream in certain cases. 201o COMPRESS-277: IOUtils#skip might skip fewer bytes than requested even though 202 more could be read from the stream. 203o COMPRESS-276: ArchiveStreams now validate there is a current entry before 204 reading or writing entry data. 205o ArjArchiveInputStream#canReadEntryData tested the current 206 entry of the stream rather than its argument. 207o COMPRESS-274: ChangeSet#delete and deleteDir now properly deal with unnamed 208 entries. 209o COMPRESS-273: Added a few null checks to improve robustness. 210o COMPRESS-278: TarArchiveInputStream failed to read archives with empty 211 gid/uid fields. 212o COMPRESS-279: TarArchiveInputStream now again throws an exception when it 213 encounters a truncated archive while reading from the last 214 entry. 215o COMPRESS-280: Adapted TarArchiveInputStream#skip to the modified 216 IOUtils#skip method. Thanks to BELUGA BEHR. 217 218Changes: 219o The dependency on org.tukaani:xz is now marked as optional. 220 221Release 1.8 222----------- 223 224New features: 225o GzipCompressorInputStream now provides access to the same 226 metadata that can be provided via GzipParameters when writing 227 a gzip stream. 228 Issue: COMPRESS-260. 229o SevenZOutputFile now supports chaining multiple 230 compression/encryption/filter methods and passing options to 231 the methods. 232 Issue: COMPRESS-266. 233o The (compression) method(s) can now be specified per entry in 234 SevenZOutputFile. 235 Issue: COMPRESS-261. 236o SevenZArchiveEntry "knows" which method(s) have been used to 237 write it to the archive. 238 Issue: COMPRESS-258. 239o The 7z package now supports the delta filter as method. 240o The 7z package now supports BCJ filters for several platforms. 241 You will need a version >= 1.5 of XZ for Java to read archives 242 using BCJ, though. 243 Issue: COMPRESS-257. 244 245Fixed Bugs: 246o BZip2CompressorInputStream read fewer bytes than possible from 247 a truncated stream. 248 Issue: COMPRESS-253. 249o SevenZFile failed claiming the dictionary was too large when 250 archives used LZMA compression for headers and content and 251 certain non-default dictionary sizes. 252 Issue: COMPRESS-253. 253o CompressorStreamFactory.createCompressorInputStream with 254 explicit compression did not honor decompressConcatenated 255 Issue: COMPRESS-259. 256o TarArchiveInputStream will now read archives created by tar 257 implementations that encode big numbers by not adding a 258 trailing NUL. 259 Issue: COMPRESS-262. 260o ZipArchiveInputStream would return NUL bytes for the first 512 261 bytes of a STORED entry if it was the very first entry of the 262 archive. 263 Issue: COMPRESS-264. 264o When writing PAX/POSIX headers for TAR entries with 265 backslashes or certain non-ASCII characters in their name 266 TarArchiveOutputStream could fail. 267 Issue: COMPRESS-265. 268o ArchiveStreamFactory now throws a StreamingNotSupported - a 269 new subclass of ArchiveException - if it is asked to read from 270 or write to a stream and Commons Compress doesn't support 271 streaming for the format. This currently only applies to the 272 7z format. 273 Issue: COMPRESS-267. 274 275Release 1.7 276----------- 277 278New features: 279o Read-Only support for Snappy compression. 280 Issue: COMPRESS-147. Thanks to BELUGA BEHR. 281o Read-Only support for .Z compressed files. 282 Issue: COMPRESS-243. Thanks to Damjan Jovanovic. 283o ZipFile and ZipArchiveInputStream now support reading entries 284 compressed using the SHRINKING method. Thanks to Damjan Jovanovic. 285o GzipCompressorOutputStream now supports setting the compression 286 level and the header metadata (filename, comment, modification time, 287 operating system and extra flags) 288 Issue: COMPRESS-250. Thanks to Emmanuel Bourg. 289o ZipFile and ZipArchiveInputStream now support reading entries 290 compressed using the IMPLODE method. 291 Issue: COMPRESS-115. Thanks to Emmanuel Bourg. 292o ZipFile and the 7z file classes now implement Closeable and can be 293 used in try-with-resources constructs. 294 295Fixed Bugs: 296o SevenZOutputFile#closeArchiveEntry throws an exception when using 297 LZMA2 compression on Java8. Issue: COMPRESS-241. 298o 7z reading of big 64bit values could be wrong. 299 Issue: COMPRESS-244. Thanks to Nico Kruber. 300o TarArchiveInputStream could fail to read an archive completely. 301 Issue: COMPRESS-245. 302o The time-setters in X5455_ExtendedTimestamp now set the 303 corresponding flags explicitly - i.e. they set the bit if the valus 304 is not-null and reset it otherwise. This may cause 305 incompatibilities if you use setFlags to unset a bit and later set 306 the time to a non-null value - the flag will now be set. 307 Issue: COMPRESS-242. 308o SevenZOutputFile would create invalid archives if more than six 309 empty files or directories were included. Issue: COMPRESS-252. 310 311Release 1.6 312----------- 313 314Version 1.6 introduces changes to the internal API of the tar package that 315break backwards compatibility in the following rare cases. This version 316removes the package private TarBuffer class along with the protected "buffer" 317members in TarArchiveInputStream and TarArchiveOutputStream. This change will 318only affect you if you have created a subclass of one of the stream classes 319and accessed the buffer member or directly used the TarBuffer class. 320 321Changes in this version include: 322 323New features: 324o Added support for 7z archives. Most compression algorithms 325 can be read and written, LZMA and encryption are only 326 supported when reading. Issue: COMPRESS-54. Thanks to Damjan Jovanovic. 327o Added read-only support for ARJ archives that don't use 328 compression. Issue: COMPRESS-226. Thanks to Damjan Jovanovic. 329o DumpArchiveInputStream now supports an encoding parameter that 330 can be used to specify the encoding of file names. 331o The CPIO streams now support an encoding parameter that can be 332 used to specify the encoding of file names. 333o Read-only support for LZMA standalone compression has been added. 334 Issue: COMPRESS-111. 335 336Fixed Bugs: 337o TarBuffer.tryToConsumeSecondEOFRecord could throw a 338 NullPointerException Issue: COMPRESS-223. Thanks to Jeremy Gustie. 339o Parsing of zip64 extra fields has become more lenient in order 340 to be able to read archives created by DotNetZip and maybe 341 other archivers as well. Issue: COMPRESS-228. 342o TAR will now properly read the names of symbolic links with 343 long names that use the GNU variant to specify the long file 344 name. Issue: COMPRESS-229. Thanks to Christoph Gysin. 345o ZipFile#getInputStream could return null if the archive 346 contained duplicate entries. 347 The class now also provides two new methods to obtain all 348 entries of a given name rather than just the first one. 349 Issue: COMPRESS-227. 350o CpioArchiveInputStream failed to read archives created by 351 Redline RPM. Issue: COMPRESS-236. Thanks to Andrew Duffy. 352o TarArchiveOutputStream now properly handles link names that 353 are too long to fit into a traditional TAR header. Issue: 354 COMPRESS-237. Thanks to Emmanuel Bourg. 355o The auto-detecting create*InputStream methods of Archive and 356 CompressorStreamFactory could fail to detect the format of 357 blocking input streams. Issue: COMPRESS-239. 358 359Changes: 360o Readabilty patch to TarArchiveInputStream. Issue: 361 COMPRESS-232. Thanks to BELUGA BEHR. 362o Performance improvements to TarArchiveInputStream, in 363 particular to the skip method. Issue: COMPRESS-234. Thanks to 364 BELUGA BEHR. 365 366Release 1.5 367----------- 368 369New features: 370 371o CompressorStreamFactory has an option to create decompressing 372 streams that decompress the full input for formats that support 373 multiple concatenated streams. 374 Issue: COMPRESS-220. 375 376Fixed Bugs: 377 378o Typo in CompressorStreamFactory Javadoc 379 Issue: COMPRESS-218. 380 Thanks to Gili. 381o ArchiveStreamFactory's tar stream detection created false positives 382 for AIFF files. 383 Issue: COMPRESS-191. 384 Thanks to Jukka Zitting. 385o XZ for Java didn't provide an OSGi bundle. Compress' dependency on 386 it has now been marked optional so Compress itself can still be used 387 in an OSGi context. 388 Issue: COMPRESS-199. 389 Thanks to Jukka Zitting. 390o When specifying the encoding explicitly TarArchiveOutputStream would 391 write unreadable names in GNU mode or even cause errors in POSIX 392 mode for file names longer than 66 characters. 393 Issue: COMPRESS-200. 394 Thanks to Christian Schlichtherle. 395o Writing TAR PAX headers failed if the generated entry name ended 396 with a "/". 397 Issue: COMPRESS-203. 398o ZipArchiveInputStream sometimes failed to provide input to the 399 Inflater when it needed it, leading to reads returning 0. 400 Issue: COMPRESS-189. 401 Thanks to Daniel Lowe. 402o TarArchiveInputStream ignored the encoding for GNU long name 403 entries. 404 Issue: COMPRESS-212. 405o TarArchiveInputStream could leave the second EOF record inside the 406 stream it had just finished reading. 407 Issue: COMPRESS-206. 408 Thanks to Peter De Maeyer. 409o DumpArchiveInputStream no longer implicitly closes the original 410 input stream when it reaches the end of the archive. 411o ZipArchiveInputStream now consumes the remainder of the archive when 412 getNextZipEntry returns null. 413o Unit tests could fail if the source tree was checked out to a 414 directory tree containign spaces. 415 Issue: COMPRESS-205. 416 Thanks to Daniel Lowe. 417o Fixed a potential ArrayIndexOutOfBoundsException when reading STORED 418 entries from ZipArchiveInputStream. 419 Issue: COMPRESS-219. 420o CompressorStreamFactory can now be used without XZ for Java being 421 available. 422 Issue: COMPRESS-221. 423 424Changes: 425 426o Improved exception message if a zip archive cannot be read because 427 of an unsupported compression method. 428 Issue: COMPRESS-188. 429 Thanks to Harald Kuhn. 430o ArchiveStreamFactory has a setting for file name encoding that sets 431 up encoding for ZIP and TAR streams. 432 Issue: COMPRESS-192. 433 Thanks to Jukka Zitting. 434o TarArchiveEntry now has a method to verify its checksum. 435 Issue: COMPRESS-191. 436 Thanks to Jukka Zitting. 437o Split/spanned ZIP archives are now properly detected by 438 ArchiveStreamFactory but will cause an 439 UnsupportedZipFeatureException when read. 440o ZipArchiveInputStream now reads archives that start with a "PK00" 441 signature. Archives with this signatures are created when the 442 archiver was willing to split the archive but in the end only needed 443 a single segment - so didn't split anything. 444 Issue: COMPRESS-208. 445o TarArchiveEntry has a new constructor that allows setting linkFlag 446 and preserveLeadingSlashes at the same time. 447 Issue: COMPRESS-201. 448o ChangeSetPerformer has a new perform overload that uses a ZipFile 449 instance as input. 450 Issue: COMPRESS-159. 451o Garbage collection pressure has been reduced by reusing temporary 452 byte arrays in classes. 453 Issue: COMPRESS-172. 454 Thanks to Thomas Mair. 455o Can now handle zip extra field 0x5455 - Extended Timestamp. 456 Issue: COMPRESS-210. 457 Thanks to Julius Davies. 458o handle zip extra field 0x7875 - Info Zip New Unix Extra Field. 459 Issue: COMPRESS-211. 460 Thanks to Julius Davies. 461o ZipShort, ZipLong, ZipEightByteInteger should implement Serializable 462 Issue: COMPRESS-213. 463 Thanks to Julius Davies. 464o better support for unix symlinks in ZipFile entries. 465 Issue: COMPRESS-214. 466 Thanks to Julius Davies. 467o ZipFile's initialization has been improved for non-Zip64 archives. 468 Issue: COMPRESS-215. 469 Thanks to Robin Power. 470o Updated XZ for Java dependency to 1.2 as this version provides 471 proper OSGi manifest attributes. 472 473Release 1.4.1 474------------- 475 476This is a security bugfix release, see 477https://commons.apache.org/proper/commons-compress/security.html#Fixed_in_Apache_Commons_Compress_1.4.1 478 479Fixed Bugs: 480 481o Ported libbzip2's fallback sort algorithm to 482 BZip2CompressorOutputStream to speed up compression in certain 483 edge cases. 484 485Release 1.4 486----------- 487 488New features: 489o COMPRESS-156: Support for the XZ format has been added. 490 491Fixed Bugs: 492o COMPRESS-183: The tar package now allows the encoding of file names to be 493 specified and can optionally use PAX extension headers to 494 write non-ASCII file names. 495 The stream classes now write (or expect to read) archives that 496 use the platform's native encoding for file names. Apache 497 Commons Compress 1.3 used to strip everything but the lower 498 eight bits of each character which effectively only worked for 499 ASCII and ISO-8859-1 file names. 500 This new default behavior is a breaking change. 501o COMPRESS-184: TarArchiveInputStream failed to parse PAX headers that 502 contained non-ASCII characters. 503o COMPRESS-178: TarArchiveInputStream throws IllegalArgumentException instead of IOException 504o COMPRESS-179: TarUtils.formatLongOctalOrBinaryBytes() assumes the field will be 12 bytes long 505o COMPRESS-175: GNU Tar sometimes uses binary encoding for UID and GID 506o COMPRESS-171: ArchiveStreamFactory.createArchiveInputStream would claim 507 short text files were TAR archives. 508o COMPRESS-164: ZipFile didn't work properly for archives using unicode extra 509 fields rather than UTF-8 filenames and the EFS-Flag. 510o COMPRESS-169: For corrupt archives ZipFile would throw a RuntimeException in 511 some cases and an IOException in others. It will now 512 consistently throw an IOException. 513 514Changes: 515o COMPRESS-182: The tar package can now write archives that use star/GNU/BSD 516 extensions or use the POSIX/PAX variant to store numeric 517 values that don't fit into the traditional header fields. 518o COMPRESS-181: Added a workaround for a Bug some tar implementations that add 519 a NUL byte as first byte in numeric header fields. 520o COMPRESS-176: Added a workaround for a Bug in WinZIP which uses backslashes 521 as path separators in Unicode Extra Fields. 522o COMPRESS-131: ArrayOutOfBounds while decompressing bz2. Added test case - code already seems to have been fixed. 523o COMPRESS-146: BZip2CompressorInputStream now optionally supports reading of 524 concatenated .bz2 files. 525o COMPRESS-154: GZipCompressorInputStream now optionally supports reading of 526 concatenated .gz files. 527o COMPRESS-16: The tar package can now read archives that use star/GNU/BSD 528 extensions for files that are longer than 8 GByte as well as 529 archives that use the POSIX/PAX variant. 530o COMPRESS-165: The tar package can now write archives that use star/GNU/BSD 531 extensions for files that are longer than 8 GByte as well as 532 archives that use the POSIX/PAX variant. 533o COMPRESS-166: The tar package can now use the POSIX/PAX variant for writing 534 entries with names longer than 100 characters. 535 536Release 1.3 537----------- 538 539Commons Compress 1.3 is the first version to require Java5 at runtime. 540 541Changes in this version include: 542 543New features: 544o Support for the Pack200 format has been added. Issue: COMPRESS-142. 545o Read-only support for the format used by the Unix dump(8) tool 546 has been added. Issue: COMPRESS-132. 547 548Fixed Bugs: 549o BZip2CompressorInputStream's getBytesRead method always 550 returned 0. 551o ZipArchiveInputStream and ZipArchiveOutputStream could leak 552 resources on some JDKs. Issue: COMPRESS-152. 553o TarArchiveOutputStream's getBytesWritten method didn't count 554 correctly. Issue: COMPRESS-160. 555 556Changes: 557o The ZIP package now supports Zip64 extensions. Issue: COMPRESS-36. 558o The AR package now supports the BSD dialect of storing file 559 names longer than 16 chars (both reading and writing). 560 Issue: COMPRESS-144. 561 562Release 1.2 563----------- 564 565New features: 566o COMPRESS-123: ZipArchiveEntry has a new method getRawName that provides the 567 original bytes that made up the name. This may allow user 568 code to detect the encoding. 569o COMPRESS-122: TarArchiveEntry provides access to the flags that determine 570 whether it is an archived symbolic link, pipe or other 571 "uncommon" file system object. 572 573Fixed Bugs: 574o COMPRESS-129: ZipArchiveInputStream could fail with a "Truncated ZIP" error 575 message for entries between 2 GByte and 4 GByte in size. 576o COMPRESS-145: TarArchiveInputStream now detects sparse entries using the 577 oldgnu format and properly reports it cannot extract their 578 contents. 579o COMPRESS-130: The Javadoc for ZipArchiveInputStream#skip now matches the 580 implementation, the code has been made more defensive. 581o COMPRESS-140: ArArchiveInputStream fails if entries contain only blanks for 582 userId or groupId. Thanks to Trejkaz. 583o COMPRESS-139: ZipFile may leak resources on some JDKs. 584o COMPRESS-125: BZip2CompressorInputStream throws IOException if 585 underlying stream returns available() == 0. 586 Removed the check. 587o COMPRESS-127: Calling close() on inputStream returned by 588 CompressorStreamFactory.createCompressorInputStream() 589 does not close the underlying input stream. 590o COMPRESS-119: TarArchiveOutputStream#finish now writes all buffered 591 data to the stream 592 593Changes: 594o ZipFile now implements finalize which closes the underlying 595 file. 596o COMPRESS-117: Certain tar files not recognised by 597 ArchiveStreamFactory. 598 599Release 1.1 600----------- 601 602New features: 603o COMPRESS-108: Command-line interface to list archive contents. 604 Usage: java -jar commons-compress-n.m.jar archive-name [zip|tar|etc] 605o COMPRESS-109: Tar implementation does not support Pax headers 606 Added support for reading pax headers. 607 Note: does not support global pax headers 608o COMPRESS-103: ZipArchiveInputStream can optionally extract data that used 609 the STORED compression method and a data descriptor. 610 Doing so in a stream is not safe in general, so you have to 611 explicitly enable the feature. By default the stream will 612 throw an exception if it encounters such an entry. 613o COMPRESS-98: The ZIP classes will throw specialized exceptions if any 614 attempt is made to read or write data that uses zip features 615 not supported (yet). 616o COMPRESS-99: ZipFile#getEntries returns entries in a predictable order - 617 the order they appear inside the central directory. 618 A new method getEntriesInPhysicalOrder returns entries in 619 order of the entry data, i.e. the order ZipArchiveInputStream 620 would see. 621o The Archive*Stream and ZipFile classes now have 622 can(Read|Write)EntryData methods that can be used to check 623 whether a given entry's data can be read/written. 624 The method currently returns false for ZIP archives if an 625 entry uses an unsupported compression method or encryption. 626o COMPRESS-89: The ZIP classes now detect encrypted entries. 627o COMPRESS-97: Added autodetection of compression format to 628 CompressorStreamFactory. 629o COMPRESS-95: Improve ExceptionMessages in ArchiveStreamFactory Thanks to Joerg Bellmann. 630o A new constructor of TarArchiveEntry can create entries with 631 names that start with slashes - the default is to strip 632 leading slashes in order to create relative path names. 633o ArchiveEntry now has a getLastModifiedDate method. 634o COMPRESS-78: Add a BZip2Utils class modelled after GZipUtils Thanks to Jukka Zitting. 635 636Fixed Bugs: 637o COMPRESS-72: Move acknowledgements from NOTICE to README 638o COMPRESS-113: TarArchiveEntry.parseTarHeader() includes the trailing space/NUL when parsing the octal size 639o COMPRESS-118: TarUtils.parseName does not properly handle characters outside the range 0-127 640o COMPRESS-107: ArchiveStreamFactory does not recognise tar files created by Ant 641o COMPRESS-110: Support "ustar" prefix field, which is used when file paths are longer 642 than 100 characters. 643o COMPRESS-100: ZipArchiveInputStream will throw an exception if it detects an 644 entry that uses a data descriptor for a STORED entry since it 645 cannot reliably find the end of data for this "compression" 646 method. 647o COMPRESS-101: ZipArchiveInputStream should now properly read archives that 648 use data descriptors but without the "unofficial" signature. 649o COMPRESS-74: ZipArchiveInputStream failed to update the number of bytes 650 read properly. 651o ArchiveInputStream has a new method getBytesRead that should 652 be preferred over getCount since the later may truncate the 653 number of bytes read for big archives. 654o COMPRESS-85: The cpio archives created by CpioArchiveOutputStream couldn't 655 be read by many existing native implementations because the 656 archives contained multiple entries with the same inode/device 657 combinations and weren't padded to a blocksize of 512 bytes. 658o COMPRESS-73: ZipArchiveEntry, ZipFile and ZipArchiveInputStream are now 659 more lenient when parsing extra fields. 660o COMPRESS-82: cpio is terribly slow. 661 Documented that buffered streams are needed for performance 662o Improved exception message if the extra field data in ZIP 663 archives cannot be parsed. 664o COMPRESS-17: Tar format unspecified - current support documented. 665o COMPRESS-94: ZipArchiveEntry's equals method was broken for entries created 666 with the String-arg constructor. This lead to broken ZIP 667 archives if two different entries had the same hash code. Thanks to Anon Devs. 668o COMPRESS-87: ZipArchiveInputStream could repeatedly return 0 on read() when 669 the archive was truncated. Thanks to Antoni Mylka. 670o COMPRESS-86: Tar archive entries holding the file name for names longer 671 than 100 characters in GNU longfile mode didn't properly 672 specify they'd be using the "oldgnu" extension. 673o COMPRESS-83: Delegate all read and write methods in GZip stream in order to 674 speed up operations. 675o The ar and cpio streams now properly read and write last 676 modified times. 677o COMPRESS-81: TarOutputStream can leave garbage at the end of the archive 678 679Changes: 680o COMPRESS-112: ArArchiveInputStream does not handle GNU extended filename records (//) 681o COMPRESS-105: Document that the name of an ZipArchiveEntry determines whether 682 an entry is considered a directory or not. 683 If you don't use the constructor with the File argument the entry's 684 name must end in a "/" in order for the entry to be known as a directory. 685o COMPRESS-79: Move DOS/Java time conversions into Zip utility class. 686o COMPRESS-75: ZipArchiveInputStream does not show location in file 687 where a problem occurred. 688 689