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