Module Name: src Committed By: maya Date: Sun Jul 21 11:52:14 UTC 2019
Modified Files: src/external/bsd/bzip2/dist: bzip2.1 bzip2.c bzip2recover.c bzlib.c bzlib_private.h decompress.c Log Message: Merge bzip2 1.0.8 1.0.7 (27 Jun 19) ~~~~~~~~~~~~~~~~~ * Fix undefined behavior in the macros SET_BH, CLEAR_BH, & ISSET_BH * bzip2: Fix return value when combining --test,-t and -q. * bzip2recover: Fix buffer overflow for large argv[0] * bzip2recover: Fix use after free issue with outFile (CVE-2016-3189) * Make sure nSelectors is not out of range (CVE-2019-12900) 1.0.8 (13 Jul 19) ~~~~~~~~~~~~~~~~~ * Accept as many selectors as the file format allows. This relaxes the fix for CVE-2019-12900 from 1.0.7 so that bzip2 allows decompression of bz2 files that use (too) many selectors again. * Fix handling of large (> 4GB) files on Windows. * Cleanup of bzdiff and bzgrep scripts so they don't use any bash extensions and handle multiple archives correctly. * There is now a bz2-files testsuite at https://sourceware.org/git/bzip2-tests.git To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/external/bsd/bzip2/dist/bzip2.1 \ src/external/bsd/bzip2/dist/bzlib.c \ src/external/bsd/bzip2/dist/bzlib_private.h \ src/external/bsd/bzip2/dist/decompress.c cvs rdiff -u -r1.4 -r1.5 src/external/bsd/bzip2/dist/bzip2.c \ src/external/bsd/bzip2/dist/bzip2recover.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/bsd/bzip2/dist/bzip2.1 diff -u src/external/bsd/bzip2/dist/bzip2.1:1.3 src/external/bsd/bzip2/dist/bzip2.1:1.4 --- src/external/bsd/bzip2/dist/bzip2.1:1.3 Mon May 7 00:45:47 2012 +++ src/external/bsd/bzip2/dist/bzip2.1 Sun Jul 21 11:52:14 2019 @@ -1,31 +1,40 @@ -.\" $NetBSD: bzip2.1,v 1.3 2012/05/07 00:45:47 wiz Exp $ +.\" $NetBSD: bzip2.1,v 1.4 2019/07/21 11:52:14 maya Exp $ .\" -.Dd May 14, 2010 -.Dt BZIP2 1 -.Os -.Sh NAME -.Nm bzip2 , -.Nm bunzip2 , -.Nm bzcat , -.Nm bzip2recover -.Nd block-sorting file compressor -.Sh SYNOPSIS -.Nm bzip2 -.Op Fl 123456789cdfkLqstVvz -.Op Ar filename Ar -.Pp -.Nm bunzip2 -.Op Fl fkLVvs -.Op Ar filename Ar -.Pp -.Nm bzcat -.Op Fl s -.Op Ar filename Ar -.Pp -.Nm bzip2recover -.Ar filename -.Sh DESCRIPTION -.Nm bzip2 +.PU +.TH bzip2 1 +.SH NAME +bzip2, bunzip2 \- a block-sorting file compressor, v1.0.8 +.br +bzcat \- decompresses files to stdout +.br +bzip2recover \- recovers data from damaged bzip2 files + +.SH SYNOPSIS +.ll +8 +.B bzip2 +.RB [ " \-cdfkqstvzVL123456789 " ] +[ +.I "filenames \&..." +] +.ll -8 +.br +.B bunzip2 +.RB [ " \-fkvsVL " ] +[ +.I "filenames \&..." +] +.br +.B bzcat +.RB [ " \-s " ] +[ +.I "filenames \&..." +] +.br +.B bzip2recover +.I "filename" + +.SH DESCRIPTION +.I bzip2 compresses files using the Burrows-Wheeler block sorting text compression algorithm, and Huffman coding. Compression is generally considerably better than that achieved by @@ -486,25 +495,51 @@ I/O error messages are not as helpful as .Nm bzip2 tries hard to detect I/O errors and exit cleanly, but the details of what the problem is sometimes seem rather misleading. -.Pp -This manual page pertains to version 1.0.6 of -.Nm bzip2 . + +This manual page pertains to version 1.0.8 of +.I bzip2. Compressed data created by this version is entirely forwards and backwards compatible with the previous public releases, versions -0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and above, but with the -following exception: 0.9.0 and above can correctly decompress multiple -concatenated compressed files. -0.1pl2 cannot do this; it will stop after decompressing just the first -file in the stream. -.Pp -.Nm bzip2recover -versions prior to 1.0.2 used 32-bit integers to represent bit -positions in compressed files, so they could not handle compressed -files more than 512 megabytes long. -Versions 1.0.2 and above use 64-bit ints on some platforms which -support them (GNU supported targets, and Windows). -To establish whether or not -.Nm bzip2recover -was built with such a limitation, run it without arguments. -In any event you can build yourself an unlimited version if you can -recompile it with MaybeUInt64 set to be an unsigned 64-bit integer. +0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and above, but with the following +exception: 0.9.0 and above can correctly decompress multiple +concatenated compressed files. 0.1pl2 cannot do this; it will stop +after decompressing just the first file in the stream. + +.I bzip2recover +versions prior to 1.0.2 used 32-bit integers to represent +bit positions in compressed files, so they could not handle compressed +files more than 512 megabytes long. Versions 1.0.2 and above use +64-bit ints on some platforms which support them (GNU supported +targets, and Windows). To establish whether or not bzip2recover was +built with such a limitation, run it without arguments. In any event +you can build yourself an unlimited version if you can recompile it +with MaybeUInt64 set to be an unsigned 64-bit integer. + + + +.SH AUTHOR +Julian Seward, jsew...@acm.org. + +https://sourceware.org/bzip2/ + +The ideas embodied in +.I bzip2 +are due to (at least) the following +people: Michael Burrows and David Wheeler (for the block sorting +transformation), David Wheeler (again, for the Huffman coder), Peter +Fenwick (for the structured coding model in the original +.I bzip, +and many refinements), and Alistair Moffat, Radford Neal and Ian Witten +(for the arithmetic coder in the original +.I bzip). +I am much +indebted for their help, support and advice. See the manual in the +source distribution for pointers to sources of documentation. Christian +von Roques encouraged me to look for faster sorting algorithms, so as to +speed up compression. Bela Lubkin encouraged me to improve the +worst-case compression performance. +Donna Robinson XMLised the documentation. +The bz* scripts are derived from those of GNU gzip. +Many people sent patches, helped +with portability problems, lent machines, gave advice and were generally +helpful. Index: src/external/bsd/bzip2/dist/bzlib.c diff -u src/external/bsd/bzip2/dist/bzlib.c:1.3 src/external/bsd/bzip2/dist/bzlib.c:1.4 --- src/external/bsd/bzip2/dist/bzlib.c:1.3 Mon May 7 00:45:47 2012 +++ src/external/bsd/bzip2/dist/bzlib.c Sun Jul 21 11:52:14 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bzlib.c,v 1.3 2012/05/07 00:45:47 wiz Exp $ */ +/* $NetBSD: bzlib.c,v 1.4 2019/07/21 11:52:14 maya Exp $ */ /*-------------------------------------------------------------*/ @@ -10,8 +10,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward <jsew...@bzip.org> + bzip2/libbzip2 version 1.0.8 of 13 July 2019 + Copyright (C) 1996-2019 Julian Seward <jsew...@acm.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. @@ -45,12 +45,12 @@ void BZ2_bz__AssertH__fail ( int errcode fprintf(stderr, "\n\nbzip2/libbzip2: internal error number %d.\n" "This is a bug in bzip2/libbzip2, %s.\n" - "Please report it to me at: jsew...@bzip.org. If this happened\n" + "Please report it to: bzip2-de...@sourceware.org. If this happened\n" "when you were using some program which uses libbzip2 as a\n" "component, you should also report this bug to the author(s)\n" "of that program. Please make an effort to report this bug;\n" "timely and accurate bug reports eventually lead to higher\n" - "quality software. Thanks. Julian Seward, 10 December 2007.\n\n", + "quality software. Thanks.\n\n", errcode, BZ2_bzlibVersion() ); Index: src/external/bsd/bzip2/dist/bzlib_private.h diff -u src/external/bsd/bzip2/dist/bzlib_private.h:1.3 src/external/bsd/bzip2/dist/bzlib_private.h:1.4 --- src/external/bsd/bzip2/dist/bzlib_private.h:1.3 Mon May 7 00:45:47 2012 +++ src/external/bsd/bzip2/dist/bzlib_private.h Sun Jul 21 11:52:14 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bzlib_private.h,v 1.3 2012/05/07 00:45:47 wiz Exp $ */ +/* $NetBSD: bzlib_private.h,v 1.4 2019/07/21 11:52:14 maya Exp $ */ /*-------------------------------------------------------------*/ @@ -10,8 +10,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward <jsew...@bzip.org> + bzip2/libbzip2 version 1.0.8 of 13 July 2019 + Copyright (C) 1996-2019 Julian Seward <jsew...@acm.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. @@ -38,7 +38,7 @@ /*-- General stuff. --*/ -#define BZ_VERSION "1.0.6, 6-Sept-2010" +#define BZ_VERSION "1.0.8, 13-Jul-2019" typedef char Char; typedef unsigned char Bool; Index: src/external/bsd/bzip2/dist/decompress.c diff -u src/external/bsd/bzip2/dist/decompress.c:1.3 src/external/bsd/bzip2/dist/decompress.c:1.4 --- src/external/bsd/bzip2/dist/decompress.c:1.3 Mon May 7 00:45:48 2012 +++ src/external/bsd/bzip2/dist/decompress.c Sun Jul 21 11:52:14 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: decompress.c,v 1.3 2012/05/07 00:45:48 wiz Exp $ */ +/* $NetBSD: decompress.c,v 1.4 2019/07/21 11:52:14 maya Exp $ */ /*-------------------------------------------------------------*/ @@ -10,8 +10,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward <jsew...@bzip.org> + bzip2/libbzip2 version 1.0.8 of 13 July 2019 + Copyright (C) 1996-2019 Julian Seward <jsew...@acm.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. @@ -287,7 +287,7 @@ Int32 BZ2_decompress ( DState* s ) /*--- Now the selectors ---*/ GET_BITS(BZ_X_SELECTOR_1, nGroups, 3); - if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR); + if (nGroups < 2 || nGroups > BZ_N_GROUPS) RETURN(BZ_DATA_ERROR); GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15); if (nSelectors < 1) RETURN(BZ_DATA_ERROR); for (i = 0; i < nSelectors; i++) { @@ -298,8 +298,14 @@ Int32 BZ2_decompress ( DState* s ) j++; if (j >= nGroups) RETURN(BZ_DATA_ERROR); } - s->selectorMtf[i] = j; + /* Having more than BZ_MAX_SELECTORS doesn't make much sense + since they will never be used, but some implementations might + "round up" the number of selectors, so just ignore those. */ + if (i < BZ_MAX_SELECTORS) + s->selectorMtf[i] = j; } + if (nSelectors > BZ_MAX_SELECTORS) + nSelectors = BZ_MAX_SELECTORS; /*--- Undo the MTF values for the selectors. ---*/ { Index: src/external/bsd/bzip2/dist/bzip2.c diff -u src/external/bsd/bzip2/dist/bzip2.c:1.4 src/external/bsd/bzip2/dist/bzip2.c:1.5 --- src/external/bsd/bzip2/dist/bzip2.c:1.4 Sun Oct 20 03:14:21 2013 +++ src/external/bsd/bzip2/dist/bzip2.c Sun Jul 21 11:52:14 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bzip2.c,v 1.4 2013/10/20 03:14:21 christos Exp $ */ +/* $NetBSD: bzip2.c,v 1.5 2019/07/21 11:52:14 maya Exp $ */ /*-----------------------------------------------------------*/ @@ -9,8 +9,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward <jsew...@bzip.org> + bzip2/libbzip2 version 1.0.8 of 13 July 2019 + Copyright (C) 1996-2019 Julian Seward <jsew...@acm.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. @@ -130,12 +130,12 @@ #if BZ_LCCWIN32 # include <io.h> # include <fcntl.h> -# include <sys\stat.h> +# include <sys/stat.h> # define NORETURN /**/ # define PATH_SEP '\\' -# define MY_LSTAT _stat -# define MY_STAT _stat +# define MY_LSTAT _stati64 +# define MY_STAT _stati64 # define MY_S_ISREG(x) ((x) & _S_IFREG) # define MY_S_ISDIR(x) ((x) & _S_IFDIR) @@ -751,8 +751,8 @@ void panic ( const Char* s ) fprintf ( stderr, "\n%s: PANIC -- internal consistency error:\n" "\t%s\n" - "\tThis is a BUG. Please report it to me at:\n" - "\tjsew...@bzip.org\n", + "\tThis is a BUG. Please report it to:\n" + "\tbzip2-de...@sourceware.org\n", progName, s ); showFileNames(); cleanUpAndFail( 3 ); @@ -833,7 +833,7 @@ void mySIGSEGVorSIGBUScatcher ( IntNativ " The user's manual, Section 4.3, has more info on (1) and (2).\n" " \n" " If you suspect this is a bug in bzip2, or are unsure about (1)\n" - " or (2), feel free to report it to me at: jsew...@bzip.org.\n" + " or (2), feel free to report it to: bzip2-de...@sourceware.org.\n" " Section 4.3 of the user's manual describes the info a useful\n" " bug report should have. If the manual is available on your\n" " system, please try and read it before mailing me. If you don't\n" @@ -856,7 +856,7 @@ void mySIGSEGVorSIGBUScatcher ( IntNativ " The user's manual, Section 4.3, has more info on (2) and (3).\n" " \n" " If you suspect this is a bug in bzip2, or are unsure about (2)\n" - " or (3), feel free to report it to me at: jsew...@bzip.org.\n" + " or (3), feel free to report it to: bzip2-de...@sourceware.org.\n" " Section 4.3 of the user's manual describes the info a useful\n" " bug report should have. If the manual is available on your\n" " system, please try and read it before mailing me. If you don't\n" @@ -1610,11 +1610,11 @@ void license ( void ) "bzip2, a block-sorting file compressor. " "Version %s.\n" " \n" - " Copyright (C) 1996-2010 by Julian Seward.\n" + " Copyright (C) 1996-2019 by Julian Seward.\n" " \n" " This program is free software; you can redistribute it and/or modify\n" " it under the terms set out in the LICENSE file, which is included\n" - " in the bzip2-1.0.6 source distribution.\n" + " in the bzip2 source distribution.\n" " \n" " This program is distributed in the hope that it will be useful,\n" " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" @@ -2010,12 +2010,14 @@ IntNative main ( IntNative argc, Char *a testf ( aa->name ); } } - if (testFailsExist && noisy) { - fprintf ( stderr, - "\n" - "You can use the `bzip2recover' program to attempt to recover\n" - "data from undamaged sections of corrupted files.\n\n" - ); + if (testFailsExist) { + if (noisy) { + fprintf ( stderr, + "\n" + "You can use the `bzip2recover' program to attempt to recover\n" + "data from undamaged sections of corrupted files.\n\n" + ); + } setExit(2); exit(exitValue); } Index: src/external/bsd/bzip2/dist/bzip2recover.c diff -u src/external/bsd/bzip2/dist/bzip2recover.c:1.4 src/external/bsd/bzip2/dist/bzip2recover.c:1.5 --- src/external/bsd/bzip2/dist/bzip2recover.c:1.4 Wed Mar 6 07:21:55 2019 +++ src/external/bsd/bzip2/dist/bzip2recover.c Sun Jul 21 11:52:14 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bzip2recover.c,v 1.4 2019/03/06 07:21:55 martin Exp $ */ +/* $NetBSD: bzip2recover.c,v 1.5 2019/07/21 11:52:14 maya Exp $ */ /*-----------------------------------------------------------*/ /*--- Block recoverer program for bzip2 ---*/ @@ -9,8 +9,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward <jsew...@bzip.org> + bzip2/libbzip2 version 1.0.8 of 13 July 2019 + Copyright (C) 1996-2019 Julian Seward <jsew...@acm.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. @@ -324,11 +324,12 @@ Int32 main ( Int32 argc, Char** argv ) UInt32 buffHi, buffLo, blockCRC; Char* p; - strcpy ( progName, argv[0] ); + strncpy ( progName, argv[0], BZ_MAX_FILENAME-1); + progName[BZ_MAX_FILENAME-1]='\0'; inFileName[0] = outFileName[0] = 0; fprintf ( stderr, - "bzip2recover 1.0.6: extracts blocks from damaged .bz2 files.\n" ); + "bzip2recover 1.0.8: extracts blocks from damaged .bz2 files.\n" ); if (argc != 2) { fprintf ( stderr, "%s: usage is `%s damaged_file_name'.\n",