1 1.1 wiz ------------------------------------------------------------------ 2 1.1 wiz This file is part of bzip2/libbzip2, a program and library for 3 1.1 wiz lossless, block-sorting data compression. 4 1.1 wiz 5 1.1.1.3 maya bzip2/libbzip2 version 1.0.8 of 13 July 2019 6 1.1.1.3 maya Copyright (C) 1996-2019 Julian Seward <jseward (a] acm.org> 7 1.1 wiz 8 1.1 wiz Please read the WARNING, DISCLAIMER and PATENTS sections in the 9 1.1 wiz README file. 10 1.1 wiz 11 1.1 wiz This program is released under the terms of the license contained 12 1.1 wiz in the file LICENSE. 13 1.1 wiz ------------------------------------------------------------------ 14 1.1 wiz 15 1.1 wiz 16 1.1 wiz 0.9.0 17 1.1 wiz ~~~~~ 18 1.1 wiz First version. 19 1.1 wiz 20 1.1 wiz 21 1.1 wiz 0.9.0a 22 1.1 wiz ~~~~~~ 23 1.1 wiz Removed 'ranlib' from Makefile, since most modern Unix-es 24 1.1 wiz don't need it, or even know about it. 25 1.1 wiz 26 1.1 wiz 27 1.1 wiz 0.9.0b 28 1.1 wiz ~~~~~~ 29 1.1 wiz Fixed a problem with error reporting in bzip2.c. This does not effect 30 1.1 wiz the library in any way. Problem is: versions 0.9.0 and 0.9.0a (of the 31 1.1 wiz program proper) compress and decompress correctly, but give misleading 32 1.1 wiz error messages (internal panics) when an I/O error occurs, instead of 33 1.1 wiz reporting the problem correctly. This shouldn't give any data loss 34 1.1 wiz (as far as I can see), but is confusing. 35 1.1 wiz 36 1.1 wiz Made the inline declarations disappear for non-GCC compilers. 37 1.1 wiz 38 1.1 wiz 39 1.1 wiz 0.9.0c 40 1.1 wiz ~~~~~~ 41 1.1 wiz Fixed some problems in the library pertaining to some boundary cases. 42 1.1 wiz This makes the library behave more correctly in those situations. The 43 1.1 wiz fixes apply only to features (calls and parameters) not used by 44 1.1 wiz bzip2.c, so the non-fixedness of them in previous versions has no 45 1.1 wiz effect on reliability of bzip2.c. 46 1.1 wiz 47 1.1 wiz In bzlib.c: 48 1.1 wiz * made zero-length BZ_FLUSH work correctly in bzCompress(). 49 1.1 wiz * fixed bzWrite/bzRead to ignore zero-length requests. 50 1.1 wiz * fixed bzread to correctly handle read requests after EOF. 51 1.1 wiz * wrong parameter order in call to bzDecompressInit in 52 1.1 wiz bzBuffToBuffDecompress. Fixed. 53 1.1 wiz 54 1.1 wiz In compress.c: 55 1.1 wiz * changed setting of nGroups in sendMTFValues() so as to 56 1.1 wiz do a bit better on small files. This _does_ effect 57 1.1 wiz bzip2.c. 58 1.1 wiz 59 1.1 wiz 60 1.1 wiz 0.9.5a 61 1.1 wiz ~~~~~~ 62 1.1 wiz Major change: add a fallback sorting algorithm (blocksort.c) 63 1.1 wiz to give reasonable behaviour even for very repetitive inputs. 64 1.1 wiz Nuked --repetitive-best and --repetitive-fast since they are 65 1.1 wiz no longer useful. 66 1.1 wiz 67 1.1 wiz Minor changes: mostly a whole bunch of small changes/ 68 1.1 wiz bugfixes in the driver (bzip2.c). Changes pertaining to the 69 1.1 wiz user interface are: 70 1.1 wiz 71 1.1 wiz allow decompression of symlink'd files to stdout 72 1.1 wiz decompress/test files even without .bz2 extension 73 1.1 wiz give more accurate error messages for I/O errors 74 1.1 wiz when compressing/decompressing to stdout, don't catch control-C 75 1.1 wiz read flags from BZIP2 and BZIP environment variables 76 1.1 wiz decline to break hard links to a file unless forced with -f 77 1.1 wiz allow -c flag even with no filenames 78 1.1 wiz preserve file ownerships as far as possible 79 1.1 wiz make -s -1 give the expected block size (100k) 80 1.1 wiz add a flag -q --quiet to suppress nonessential warnings 81 1.1 wiz stop decoding flags after --, so files beginning in - can be handled 82 1.1 wiz resolved inconsistent naming: bzcat or bz2cat ? 83 1.1 wiz bzip2 --help now returns 0 84 1.1 wiz 85 1.1 wiz Programming-level changes are: 86 1.1 wiz 87 1.1 wiz fixed syntax error in GET_LL4 for Borland C++ 5.02 88 1.1 wiz let bzBuffToBuffDecompress return BZ_DATA_ERROR{_MAGIC} 89 1.1 wiz fix overshoot of mode-string end in bzopen_or_bzdopen 90 1.1 wiz wrapped bzlib.h in #ifdef __cplusplus ... extern "C" { ... } 91 1.1 wiz close file handles under all error conditions 92 1.1 wiz added minor mods so it compiles with DJGPP out of the box 93 1.1 wiz fixed Makefile so it doesn't give problems with BSD make 94 1.1 wiz fix uninitialised memory reads in dlltest.c 95 1.1 wiz 96 1.1 wiz 0.9.5b 97 1.1 wiz ~~~~~~ 98 1.1 wiz Open stdin/stdout in binary mode for DJGPP. 99 1.1 wiz 100 1.1 wiz 0.9.5c 101 1.1 wiz ~~~~~~ 102 1.1 wiz Changed BZ_N_OVERSHOOT to be ... + 2 instead of ... + 1. The + 1 103 1.1 wiz version could cause the sorted order to be wrong in some extremely 104 1.1 wiz obscure cases. Also changed setting of quadrant in blocksort.c. 105 1.1 wiz 106 1.1 wiz 0.9.5d 107 1.1 wiz ~~~~~~ 108 1.1 wiz The only functional change is to make bzlibVersion() in the library 109 1.1 wiz return the correct string. This has no effect whatsoever on the 110 1.1 wiz functioning of the bzip2 program or library. Added a couple of casts 111 1.1 wiz so the library compiles without warnings at level 3 in MS Visual 112 1.1 wiz Studio 6.0. Included a Y2K statement in the file Y2K_INFO. All other 113 1.1 wiz changes are minor documentation changes. 114 1.1 wiz 115 1.1 wiz 1.0 116 1.1 wiz ~~~ 117 1.1 wiz Several minor bugfixes and enhancements: 118 1.1 wiz 119 1.1 wiz * Large file support. The library uses 64-bit counters to 120 1.1 wiz count the volume of data passing through it. bzip2.c 121 1.1 wiz is now compiled with -D_FILE_OFFSET_BITS=64 to get large 122 1.1 wiz file support from the C library. -v correctly prints out 123 1.1 wiz file sizes greater than 4 gigabytes. All these changes have 124 1.1 wiz been made without assuming a 64-bit platform or a C compiler 125 1.1 wiz which supports 64-bit ints, so, except for the C library 126 1.1 wiz aspect, they are fully portable. 127 1.1 wiz 128 1.1 wiz * Decompression robustness. The library/program should be 129 1.1 wiz robust to any corruption of compressed data, detecting and 130 1.1 wiz handling _all_ corruption, instead of merely relying on 131 1.1 wiz the CRCs. What this means is that the program should 132 1.1 wiz never crash, given corrupted data, and the library should 133 1.1 wiz always return BZ_DATA_ERROR. 134 1.1 wiz 135 1.1 wiz * Fixed an obscure race-condition bug only ever observed on 136 1.1 wiz Solaris, in which, if you were very unlucky and issued 137 1.1 wiz control-C at exactly the wrong time, both input and output 138 1.1 wiz files would be deleted. 139 1.1 wiz 140 1.1 wiz * Don't run out of file handles on test/decompression when 141 1.1 wiz large numbers of files have invalid magic numbers. 142 1.1 wiz 143 1.1 wiz * Avoid library namespace pollution. Prefix all exported 144 1.1 wiz symbols with BZ2_. 145 1.1 wiz 146 1.1 wiz * Minor sorting enhancements from my DCC2000 paper. 147 1.1 wiz 148 1.1 wiz * Advance the version number to 1.0, so as to counteract the 149 1.1 wiz (false-in-this-case) impression some people have that programs 150 1.1 wiz with version numbers less than 1.0 are in some way, experimental, 151 1.1 wiz pre-release versions. 152 1.1 wiz 153 1.1 wiz * Create an initial Makefile-libbz2_so to build a shared library. 154 1.1 wiz Yes, I know I should really use libtool et al ... 155 1.1 wiz 156 1.1 wiz * Make the program exit with 2 instead of 0 when decompression 157 1.1 wiz fails due to a bad magic number (ie, an invalid bzip2 header). 158 1.1 wiz Also exit with 1 (as the manual claims :-) whenever a diagnostic 159 1.1 wiz message would have been printed AND the corresponding operation 160 1.1 wiz is aborted, for example 161 1.1 wiz bzip2: Output file xx already exists. 162 1.1 wiz When a diagnostic message is printed but the operation is not 163 1.1 wiz aborted, for example 164 1.1 wiz bzip2: Can't guess original name for wurble -- using wurble.out 165 1.1 wiz then the exit value 0 is returned, unless some other problem is 166 1.1 wiz also detected. 167 1.1 wiz 168 1.1 wiz I think it corresponds more closely to what the manual claims now. 169 1.1 wiz 170 1.1 wiz 171 1.1 wiz 1.0.1 172 1.1 wiz ~~~~~ 173 1.1 wiz * Modified dlltest.c so it uses the new BZ2_ naming scheme. 174 1.1 wiz * Modified makefile-msc to fix minor build probs on Win2k. 175 1.1 wiz * Updated README.COMPILATION.PROBLEMS. 176 1.1 wiz 177 1.1 wiz There are no functionality changes or bug fixes relative to version 178 1.1 wiz 1.0.0. This is just a documentation update + a fix for minor Win32 179 1.1 wiz build problems. For almost everyone, upgrading from 1.0.0 to 1.0.1 is 180 1.1 wiz utterly pointless. Don't bother. 181 1.1 wiz 182 1.1 wiz 183 1.1 wiz 1.0.2 184 1.1 wiz ~~~~~ 185 1.1 wiz A bug fix release, addressing various minor issues which have appeared 186 1.1 wiz in the 18 or so months since 1.0.1 was released. Most of the fixes 187 1.1 wiz are to do with file-handling or documentation bugs. To the best of my 188 1.1 wiz knowledge, there have been no data-loss-causing bugs reported in the 189 1.1 wiz compression/decompression engine of 1.0.0 or 1.0.1. 190 1.1 wiz 191 1.1 wiz Note that this release does not improve the rather crude build system 192 1.1 wiz for Unix platforms. The general plan here is to autoconfiscate/ 193 1.1 wiz libtoolise 1.0.2 soon after release, and release the result as 1.1.0 194 1.1 wiz or perhaps 1.2.0. That, however, is still just a plan at this point. 195 1.1 wiz 196 1.1 wiz Here are the changes in 1.0.2. Bug-reporters and/or patch-senders in 197 1.1 wiz parentheses. 198 1.1 wiz 199 1.1 wiz * Fix an infinite segfault loop in 1.0.1 when a directory is 200 1.1 wiz encountered in -f (force) mode. 201 1.1 wiz (Trond Eivind Glomsrod, Nicholas Nethercote, Volker Schmidt) 202 1.1 wiz 203 1.1 wiz * Avoid double fclose() of output file on certain I/O error paths. 204 1.1 wiz (Solar Designer) 205 1.1 wiz 206 1.1 wiz * Don't fail with internal error 1007 when fed a long stream (> 48MB) 207 1.1 wiz of byte 251. Also print useful message suggesting that 1007s may be 208 1.1 wiz caused by bad memory. 209 1.1 wiz (noticed by Juan Pedro Vallejo, fixed by me) 210 1.1 wiz 211 1.1 wiz * Fix uninitialised variable silly bug in demo prog dlltest.c. 212 1.1 wiz (Jorj Bauer) 213 1.1 wiz 214 1.1 wiz * Remove 512-MB limitation on recovered file size for bzip2recover 215 1.1 wiz on selected platforms which support 64-bit ints. At the moment 216 1.1 wiz all GCC supported platforms, and Win32. 217 1.1 wiz (me, Alson van der Meulen) 218 1.1 wiz 219 1.1 wiz * Hard-code header byte values, to give correct operation on platforms 220 1.1 wiz using EBCDIC as their native character set (IBM's OS/390). 221 1.1 wiz (Leland Lucius) 222 1.1 wiz 223 1.1 wiz * Copy file access times correctly. 224 1.1 wiz (Marty Leisner) 225 1.1 wiz 226 1.1 wiz * Add distclean and check targets to Makefile. 227 1.1 wiz (Michael Carmack) 228 1.1 wiz 229 1.1 wiz * Parameterise use of ar and ranlib in Makefile. Also add $(LDFLAGS). 230 1.1 wiz (Rich Ireland, Bo Thorsen) 231 1.1 wiz 232 1.1 wiz * Pass -p (create parent dirs as needed) to mkdir during make install. 233 1.1 wiz (Jeremy Fusco) 234 1.1 wiz 235 1.1 wiz * Dereference symlinks when copying file permissions in -f mode. 236 1.1 wiz (Volker Schmidt) 237 1.1 wiz 238 1.1 wiz * Majorly simplify implementation of uInt64_qrm10. 239 1.1 wiz (Bo Lindbergh) 240 1.1 wiz 241 1.1 wiz * Check the input file still exists before deleting the output one, 242 1.1 wiz when aborting in cleanUpAndFail(). 243 1.1 wiz (Joerg Prante, Robert Linden, Matthias Krings) 244 1.1 wiz 245 1.1 wiz Also a bunch of patches courtesy of Philippe Troin, the Debian maintainer 246 1.1 wiz of bzip2: 247 1.1 wiz 248 1.1 wiz * Wrapper scripts (with manpages): bzdiff, bzgrep, bzmore. 249 1.1 wiz 250 1.1 wiz * Spelling changes and minor enhancements in bzip2.1. 251 1.1 wiz 252 1.1 wiz * Avoid race condition between creating the output file and setting its 253 1.1 wiz interim permissions safely, by using fopen_output_safely(). 254 1.1 wiz No changes to bzip2recover since there is no issue with file 255 1.1 wiz permissions there. 256 1.1 wiz 257 1.1 wiz * do not print senseless report with -v when compressing an empty 258 1.1 wiz file. 259 1.1 wiz 260 1.1 wiz * bzcat -f works on non-bzip2 files. 261 1.1 wiz 262 1.1 wiz * do not try to escape shell meta-characters on unix (the shell takes 263 1.1 wiz care of these). 264 1.1 wiz 265 1.1 wiz * added --fast and --best aliases for -1 -9 for gzip compatibility. 266 1.1 wiz 267 1.1 wiz 268 1.1 wiz 1.0.3 (15 Feb 05) 269 1.1 wiz ~~~~~~~~~~~~~~~~~ 270 1.1 wiz Fixes some minor bugs since the last version, 1.0.2. 271 1.1 wiz 272 1.1 wiz * Further robustification against corrupted compressed data. 273 1.1 wiz There are currently no known bitstreams which can cause the 274 1.1 wiz decompressor to crash, loop or access memory which does not 275 1.1 wiz belong to it. If you are using bzip2 or the library to 276 1.1 wiz decompress bitstreams from untrusted sources, an upgrade 277 1.1 wiz to 1.0.3 is recommended. This fixes CAN-2005-1260. 278 1.1 wiz 279 1.1 wiz * The documentation has been converted to XML, from which html 280 1.1 wiz and pdf can be derived. 281 1.1 wiz 282 1.1 wiz * Various minor bugs in the documentation have been fixed. 283 1.1 wiz 284 1.1 wiz * Fixes for various compilation warnings with newer versions of 285 1.1 wiz gcc, and on 64-bit platforms. 286 1.1 wiz 287 1.1 wiz * The BZ_NO_STDIO cpp symbol was not properly observed in 1.0.2. 288 1.1 wiz This has been fixed. 289 1.1 wiz 290 1.1 wiz 291 1.1 wiz 1.0.4 (20 Dec 06) 292 1.1 wiz ~~~~~~~~~~~~~~~~~ 293 1.1 wiz Fixes some minor bugs since the last version, 1.0.3. 294 1.1 wiz 295 1.1 wiz * Fix file permissions race problem (CAN-2005-0953). 296 1.1 wiz 297 1.1 wiz * Avoid possible segfault in BZ2_bzclose. From Coverity's NetBSD 298 1.1 wiz scan. 299 1.1 wiz 300 1.1 wiz * 'const'/prototype cleanups in the C code. 301 1.1 wiz 302 1.1 wiz * Change default install location to /usr/local, and handle multiple 303 1.1 wiz 'make install's without error. 304 1.1 wiz 305 1.1 wiz * Sanitise file names more carefully in bzgrep. Fixes CAN-2005-0758 306 1.1 wiz to the extent that applies to bzgrep. 307 1.1 wiz 308 1.1 wiz * Use 'mktemp' rather than 'tempfile' in bzdiff. 309 1.1 wiz 310 1.1 wiz * Tighten up a couple of assertions in blocksort.c following automated 311 1.1 wiz analysis. 312 1.1 wiz 313 1.1 wiz * Fix minor doc/comment bugs. 314 1.1 wiz 315 1.1 wiz 316 1.1 wiz 1.0.5 (10 Dec 07) 317 1.1 wiz ~~~~~~~~~~~~~~~~~ 318 1.1 wiz Security fix only. Fixes CERT-FI 20469 as it applies to bzip2. 319 1.1 wiz 320 1.1.1.2 wiz 321 1.1.1.2 wiz 1.0.6 (6 Sept 10) 322 1.1.1.2 wiz ~~~~~~~~~~~~~~~~~ 323 1.1.1.2 wiz 324 1.1.1.2 wiz * Security fix for CVE-2010-0405. This was reported by Mikolaj 325 1.1.1.2 wiz Izdebski. 326 1.1.1.2 wiz 327 1.1.1.2 wiz * Make the documentation build on Ubuntu 10.04 328 1.1.1.3 maya 329 1.1.1.3 maya 1.0.7 (27 Jun 19) 330 1.1.1.3 maya ~~~~~~~~~~~~~~~~~ 331 1.1.1.3 maya 332 1.1.1.3 maya * Fix undefined behavior in the macros SET_BH, CLEAR_BH, & ISSET_BH 333 1.1.1.3 maya 334 1.1.1.3 maya * bzip2: Fix return value when combining --test,-t and -q. 335 1.1.1.3 maya 336 1.1.1.3 maya * bzip2recover: Fix buffer overflow for large argv[0] 337 1.1.1.3 maya 338 1.1.1.3 maya * bzip2recover: Fix use after free issue with outFile (CVE-2016-3189) 339 1.1.1.3 maya 340 1.1.1.3 maya * Make sure nSelectors is not out of range (CVE-2019-12900) 341 1.1.1.3 maya 342 1.1.1.3 maya 1.0.8 (13 Jul 19) 343 1.1.1.3 maya ~~~~~~~~~~~~~~~~~ 344 1.1.1.3 maya 345 1.1.1.3 maya * Accept as many selectors as the file format allows. 346 1.1.1.3 maya This relaxes the fix for CVE-2019-12900 from 1.0.7 347 1.1.1.3 maya so that bzip2 allows decompression of bz2 files that 348 1.1.1.3 maya use (too) many selectors again. 349 1.1.1.3 maya 350 1.1.1.3 maya * Fix handling of large (> 4GB) files on Windows. 351 1.1.1.3 maya 352 1.1.1.3 maya * Cleanup of bzdiff and bzgrep scripts so they don't use 353 1.1.1.3 maya any bash extensions and handle multiple archives correctly. 354 1.1.1.3 maya 355 1.1.1.3 maya * There is now a bz2-files testsuite at 356 1.1.1.3 maya https://sourceware.org/git/bzip2-tests.git 357