RELEASE-NOTES.txt 35 KB

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