patches for easier mirroring, to eliminate a special copy, to make www.freebsd.org/security a full copy of security.freebsd.org and be eventually be the same. For now files are just sitting there. The symlinks are missing. Discussed on: www (repository location) Discussed with: simon (so)
411 lines
14 KiB
Diff
411 lines
14 KiB
Diff
Index: contrib/bzip2/bzip2.c
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/contrib/bzip2/bzip2.c,v
|
|
retrieving revision 1.1.1.2
|
|
diff -u -d -r1.1.1.2 bzip2.c
|
|
--- contrib/bzip2/bzip2.c 1 Feb 2002 16:26:13 -0000 1.1.1.2
|
|
+++ contrib/bzip2/bzip2.c 21 Jun 2005 21:43:21 -0000
|
|
@@ -312,6 +312,7 @@
|
|
|
|
static void copyFileName ( Char*, Char* );
|
|
static void* myMalloc ( Int32 );
|
|
+static int applySavedFileAttrToOutputFile ( int fd );
|
|
|
|
|
|
|
|
@@ -457,6 +458,10 @@
|
|
ret = fflush ( zStream );
|
|
if (ret == EOF) goto errhandler_io;
|
|
if (zStream != stdout) {
|
|
+ int fd = fileno ( zStream );
|
|
+ if (fd < 0) goto errhandler_io;
|
|
+ ret = applySavedFileAttrToOutputFile ( fd );
|
|
+ if (ret != 0) goto errhandler_io;
|
|
ret = fclose ( zStream );
|
|
outputHandleJustInCase = NULL;
|
|
if (ret == EOF) goto errhandler_io;
|
|
@@ -525,6 +530,7 @@
|
|
UChar obuf[5000];
|
|
UChar unused[BZ_MAX_UNUSED];
|
|
Int32 nUnused;
|
|
+ void* unusedTmpV;
|
|
UChar* unusedTmp;
|
|
|
|
nUnused = 0;
|
|
@@ -554,9 +560,10 @@
|
|
}
|
|
if (bzerr != BZ_STREAM_END) goto errhandler;
|
|
|
|
- BZ2_bzReadGetUnused ( &bzerr, bzf, (void**)(&unusedTmp), &nUnused );
|
|
+ BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );
|
|
if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
|
|
|
|
+ unusedTmp = (UChar*)unusedTmpV;
|
|
for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];
|
|
|
|
BZ2_bzReadClose ( &bzerr, bzf );
|
|
@@ -567,6 +574,12 @@
|
|
|
|
closeok:
|
|
if (ferror(zStream)) goto errhandler_io;
|
|
+ if ( stream != stdout) {
|
|
+ int fd = fileno ( stream );
|
|
+ if (fd < 0) goto errhandler_io;
|
|
+ ret = applySavedFileAttrToOutputFile ( fd );
|
|
+ if (ret != 0) goto errhandler_io;
|
|
+ }
|
|
ret = fclose ( zStream );
|
|
if (ret == EOF) goto errhandler_io;
|
|
|
|
@@ -639,6 +652,7 @@
|
|
UChar obuf[5000];
|
|
UChar unused[BZ_MAX_UNUSED];
|
|
Int32 nUnused;
|
|
+ void* unusedTmpV;
|
|
UChar* unusedTmp;
|
|
|
|
nUnused = 0;
|
|
@@ -662,9 +676,10 @@
|
|
}
|
|
if (bzerr != BZ_STREAM_END) goto errhandler;
|
|
|
|
- BZ2_bzReadGetUnused ( &bzerr, bzf, (void**)(&unusedTmp), &nUnused );
|
|
+ BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );
|
|
if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );
|
|
|
|
+ unusedTmp = (UChar*)unusedTmpV;
|
|
for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];
|
|
|
|
BZ2_bzReadClose ( &bzerr, bzf );
|
|
@@ -1125,7 +1140,7 @@
|
|
|
|
|
|
static
|
|
-void applySavedMetaInfoToOutputFile ( Char *dstName )
|
|
+void applySavedTimeInfoToOutputFile ( Char *dstName )
|
|
{
|
|
# if BZ_UNIX
|
|
IntNative retVal;
|
|
@@ -1134,16 +1149,26 @@
|
|
uTimBuf.actime = fileMetaInfo.st_atime;
|
|
uTimBuf.modtime = fileMetaInfo.st_mtime;
|
|
|
|
- retVal = chmod ( dstName, fileMetaInfo.st_mode );
|
|
- ERROR_IF_NOT_ZERO ( retVal );
|
|
-
|
|
retVal = utime ( dstName, &uTimBuf );
|
|
ERROR_IF_NOT_ZERO ( retVal );
|
|
+# endif
|
|
+}
|
|
|
|
- retVal = chown ( dstName, fileMetaInfo.st_uid, fileMetaInfo.st_gid );
|
|
+static
|
|
+int applySavedFileAttrToOutputFile ( int fd )
|
|
+{
|
|
+# if BZ_UNIX
|
|
+ IntNative retVal;
|
|
+
|
|
+ retVal = fchmod ( fd, fileMetaInfo.st_mode );
|
|
+ if (retVal != 0)
|
|
+ return retVal;
|
|
+
|
|
+ (void) fchown ( fd, fileMetaInfo.st_uid, fileMetaInfo.st_gid );
|
|
/* chown() will in many cases return with EPERM, which can
|
|
be safely ignored.
|
|
*/
|
|
+ return 0;
|
|
# endif
|
|
}
|
|
|
|
@@ -1366,7 +1391,7 @@
|
|
|
|
/*--- If there was an I/O error, we won't get here. ---*/
|
|
if ( srcMode == SM_F2F ) {
|
|
- applySavedMetaInfoToOutputFile ( outName );
|
|
+ applySavedTimeInfoToOutputFile ( outName );
|
|
deleteOutputOnInterrupt = False;
|
|
if ( !keepInputFiles ) {
|
|
IntNative retVal = remove ( inName );
|
|
@@ -1544,7 +1569,7 @@
|
|
/*--- If there was an I/O error, we won't get here. ---*/
|
|
if ( magicNumberOK ) {
|
|
if ( srcMode == SM_F2F ) {
|
|
- applySavedMetaInfoToOutputFile ( outName );
|
|
+ applySavedTimeInfoToOutputFile ( outName );
|
|
deleteOutputOnInterrupt = False;
|
|
if ( !keepInputFiles ) {
|
|
IntNative retVal = remove ( inName );
|
|
Index: contrib/bzip2/bzlib.c
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/contrib/bzip2/bzlib.c,v
|
|
retrieving revision 1.1.1.2
|
|
diff -u -d -r1.1.1.2 bzlib.c
|
|
--- contrib/bzip2/bzlib.c 1 Feb 2002 16:26:07 -0000 1.1.1.2
|
|
+++ contrib/bzip2/bzlib.c 21 Jun 2005 21:43:21 -0000
|
|
@@ -574,8 +574,11 @@
|
|
|
|
|
|
/*---------------------------------------------------*/
|
|
+/* Return True iff data corruption is discovered.
|
|
+ Returns False if there is no problem.
|
|
+*/
|
|
static
|
|
-void unRLE_obuf_to_output_FAST ( DState* s )
|
|
+Bool unRLE_obuf_to_output_FAST ( DState* s )
|
|
{
|
|
UChar k1;
|
|
|
|
@@ -584,7 +587,7 @@
|
|
while (True) {
|
|
/* try to finish existing run */
|
|
while (True) {
|
|
- if (s->strm->avail_out == 0) return;
|
|
+ if (s->strm->avail_out == 0) return False;
|
|
if (s->state_out_len == 0) break;
|
|
*( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
|
|
BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
|
|
@@ -594,10 +597,13 @@
|
|
s->strm->total_out_lo32++;
|
|
if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
|
|
}
|
|
-
|
|
+
|
|
/* can a new run be started? */
|
|
- if (s->nblock_used == s->save_nblock+1) return;
|
|
+ if (s->nblock_used == s->save_nblock+1) return False;
|
|
|
|
+ /* Only caused by corrupt data stream? */
|
|
+ if (s->nblock_used > s->save_nblock+1)
|
|
+ return True;
|
|
|
|
s->state_out_len = 1;
|
|
s->state_out_ch = s->k0;
|
|
@@ -667,6 +673,10 @@
|
|
cs_avail_out--;
|
|
}
|
|
}
|
|
+ /* Only caused by corrupt data stream? */
|
|
+ if (c_nblock_used > s_save_nblockPP)
|
|
+ return True;
|
|
+
|
|
/* can a new run be started? */
|
|
if (c_nblock_used == s_save_nblockPP) {
|
|
c_state_out_len = 0; goto return_notr;
|
|
@@ -712,6 +722,7 @@
|
|
s->strm->avail_out = cs_avail_out;
|
|
/* end save */
|
|
}
|
|
+ return False;
|
|
}
|
|
|
|
|
|
@@ -732,8 +743,11 @@
|
|
|
|
|
|
/*---------------------------------------------------*/
|
|
+/* Return True iff data corruption is discovered.
|
|
+ Returns False if there is no problem.
|
|
+*/
|
|
static
|
|
-void unRLE_obuf_to_output_SMALL ( DState* s )
|
|
+Bool unRLE_obuf_to_output_SMALL ( DState* s )
|
|
{
|
|
UChar k1;
|
|
|
|
@@ -742,7 +756,7 @@
|
|
while (True) {
|
|
/* try to finish existing run */
|
|
while (True) {
|
|
- if (s->strm->avail_out == 0) return;
|
|
+ if (s->strm->avail_out == 0) return False;
|
|
if (s->state_out_len == 0) break;
|
|
*( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
|
|
BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
|
|
@@ -754,8 +768,11 @@
|
|
}
|
|
|
|
/* can a new run be started? */
|
|
- if (s->nblock_used == s->save_nblock+1) return;
|
|
-
|
|
+ if (s->nblock_used == s->save_nblock+1) return False;
|
|
+
|
|
+ /* Only caused by corrupt data stream? */
|
|
+ if (s->nblock_used > s->save_nblock+1)
|
|
+ return True;
|
|
|
|
s->state_out_len = 1;
|
|
s->state_out_ch = s->k0;
|
|
@@ -788,7 +805,7 @@
|
|
while (True) {
|
|
/* try to finish existing run */
|
|
while (True) {
|
|
- if (s->strm->avail_out == 0) return;
|
|
+ if (s->strm->avail_out == 0) return False;
|
|
if (s->state_out_len == 0) break;
|
|
*( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
|
|
BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
|
|
@@ -800,7 +817,11 @@
|
|
}
|
|
|
|
/* can a new run be started? */
|
|
- if (s->nblock_used == s->save_nblock+1) return;
|
|
+ if (s->nblock_used == s->save_nblock+1) return False;
|
|
+
|
|
+ /* Only caused by corrupt data stream? */
|
|
+ if (s->nblock_used > s->save_nblock+1)
|
|
+ return True;
|
|
|
|
s->state_out_len = 1;
|
|
s->state_out_ch = s->k0;
|
|
@@ -830,6 +851,7 @@
|
|
/*---------------------------------------------------*/
|
|
int BZ_API(BZ2_bzDecompress) ( bz_stream *strm )
|
|
{
|
|
+ Bool corrupt;
|
|
DState* s;
|
|
if (strm == NULL) return BZ_PARAM_ERROR;
|
|
s = strm->state;
|
|
@@ -840,12 +862,13 @@
|
|
if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR;
|
|
if (s->state == BZ_X_OUTPUT) {
|
|
if (s->smallDecompress)
|
|
- unRLE_obuf_to_output_SMALL ( s ); else
|
|
- unRLE_obuf_to_output_FAST ( s );
|
|
+ corrupt = unRLE_obuf_to_output_SMALL ( s ); else
|
|
+ corrupt = unRLE_obuf_to_output_FAST ( s );
|
|
+ if (corrupt) return BZ_DATA_ERROR;
|
|
if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) {
|
|
BZ_FINALISE_CRC ( s->calculatedBlockCRC );
|
|
if (s->verbosity >= 3)
|
|
- VPrintf2 ( " {0x%x, 0x%x}", s->storedBlockCRC,
|
|
+ VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC,
|
|
s->calculatedBlockCRC );
|
|
if (s->verbosity >= 2) VPrintf0 ( "]" );
|
|
if (s->calculatedBlockCRC != s->storedBlockCRC)
|
|
@@ -863,7 +886,7 @@
|
|
Int32 r = BZ2_decompress ( s );
|
|
if (r == BZ_STREAM_END) {
|
|
if (s->verbosity >= 3)
|
|
- VPrintf2 ( "\n combined CRCs: stored = 0x%x, computed = 0x%x",
|
|
+ VPrintf2 ( "\n combined CRCs: stored = 0x%08x, computed = 0x%08x",
|
|
s->storedCombinedCRC, s->calculatedCombinedCRC );
|
|
if (s->calculatedCombinedCRC != s->storedCombinedCRC)
|
|
return BZ_DATA_ERROR;
|
|
Index: contrib/bzip2/compress.c
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/contrib/bzip2/compress.c,v
|
|
retrieving revision 1.1.1.2
|
|
diff -u -d -r1.1.1.2 compress.c
|
|
--- contrib/bzip2/compress.c 1 Feb 2002 16:26:07 -0000 1.1.1.2
|
|
+++ contrib/bzip2/compress.c 21 Jun 2005 21:43:21 -0000
|
|
@@ -488,9 +488,11 @@
|
|
/*--
|
|
Recompute the tables based on the accumulated frequencies.
|
|
--*/
|
|
+ /* maxLen was changed from 20 to 17 in bzip2-1.0.3. See
|
|
+ comment in huffman.c for details. */
|
|
for (t = 0; t < nGroups; t++)
|
|
BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]),
|
|
- alphaSize, 20 );
|
|
+ alphaSize, 17 /*20*/ );
|
|
}
|
|
|
|
|
|
@@ -527,7 +529,7 @@
|
|
if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
|
|
if (s->len[t][i] < minLen) minLen = s->len[t][i];
|
|
}
|
|
- AssertH ( !(maxLen > 20), 3004 );
|
|
+ AssertH ( !(maxLen > 17 /*20*/ ), 3004 );
|
|
AssertH ( !(minLen < 1), 3005 );
|
|
BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]),
|
|
minLen, maxLen, alphaSize );
|
|
@@ -651,8 +653,8 @@
|
|
if (s->blockNo > 1) s->numZ = 0;
|
|
|
|
if (s->verbosity >= 2)
|
|
- VPrintf4( " block %d: crc = 0x%8x, "
|
|
- "combined CRC = 0x%8x, size = %d\n",
|
|
+ VPrintf4( " block %d: crc = 0x%08x, "
|
|
+ "combined CRC = 0x%08x, size = %d\n",
|
|
s->blockNo, s->blockCRC, s->combinedCRC, s->nblock );
|
|
|
|
BZ2_blockSort ( s );
|
|
@@ -703,7 +705,7 @@
|
|
bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );
|
|
bsPutUInt32 ( s, s->combinedCRC );
|
|
if (s->verbosity >= 2)
|
|
- VPrintf1( " final combined CRC = 0x%x\n ", s->combinedCRC );
|
|
+ VPrintf1( " final combined CRC = 0x%08x\n ", s->combinedCRC );
|
|
bsFinishWrite ( s );
|
|
}
|
|
}
|
|
Index: contrib/bzip2/decompress.c
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/contrib/bzip2/decompress.c,v
|
|
retrieving revision 1.1.1.2
|
|
diff -u -d -r1.1.1.2 decompress.c
|
|
--- contrib/bzip2/decompress.c 1 Feb 2002 16:26:07 -0000 1.1.1.2
|
|
+++ contrib/bzip2/decompress.c 21 Jun 2005 21:43:21 -0000
|
|
@@ -524,17 +524,23 @@
|
|
if (s->origPtr < 0 || s->origPtr >= nblock)
|
|
RETURN(BZ_DATA_ERROR);
|
|
|
|
+ /*-- Set up cftab to facilitate generation of T^(-1) --*/
|
|
+ s->cftab[0] = 0;
|
|
+ for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];
|
|
+ for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];
|
|
+ for (i = 0; i <= 256; i++) {
|
|
+ if (s->cftab[i] < 0 || s->cftab[i] > nblock) {
|
|
+ /* s->cftab[i] can legitimately be == nblock */
|
|
+ RETURN(BZ_DATA_ERROR);
|
|
+ }
|
|
+ }
|
|
+
|
|
s->state_out_len = 0;
|
|
s->state_out_ch = 0;
|
|
BZ_INITIALISE_CRC ( s->calculatedBlockCRC );
|
|
s->state = BZ_X_OUTPUT;
|
|
if (s->verbosity >= 2) VPrintf0 ( "rt+rld" );
|
|
|
|
- /*-- Set up cftab to facilitate generation of T^(-1) --*/
|
|
- s->cftab[0] = 0;
|
|
- for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];
|
|
- for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];
|
|
-
|
|
if (s->smallDecompress) {
|
|
|
|
/*-- Make a copy of cftab, used in generation of T --*/
|
|
Index: contrib/bzip2/huffman.c
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/contrib/bzip2/huffman.c,v
|
|
retrieving revision 1.1.1.2
|
|
diff -u -d -r1.1.1.2 huffman.c
|
|
--- contrib/bzip2/huffman.c 1 Feb 2002 16:26:03 -0000 1.1.1.2
|
|
+++ contrib/bzip2/huffman.c 21 Jun 2005 21:43:21 -0000
|
|
@@ -162,7 +162,24 @@
|
|
|
|
if (! tooLong) break;
|
|
|
|
- for (i = 1; i < alphaSize; i++) {
|
|
+ /* 17 Oct 04: keep-going condition for the following loop used
|
|
+ to be 'i < alphaSize', which missed the last element,
|
|
+ theoretically leading to the possibility of the compressor
|
|
+ looping. However, this count-scaling step is only needed if
|
|
+ one of the generated Huffman code words is longer than
|
|
+ maxLen, which up to and including version 1.0.2 was 20 bits,
|
|
+ which is extremely unlikely. In version 1.0.3 maxLen was
|
|
+ changed to 17 bits, which has minimal effect on compression
|
|
+ ratio, but does mean this scaling step is used from time to
|
|
+ time, enough to verify that it works.
|
|
+
|
|
+ This means that bzip2-1.0.3 and later will only produce
|
|
+ Huffman codes with a maximum length of 17 bits. However, in
|
|
+ order to preserve backwards compatibility with bitstreams
|
|
+ produced by versions pre-1.0.3, the decompressor must still
|
|
+ handle lengths of up to 20. */
|
|
+
|
|
+ for (i = 1; i <= alphaSize; i++) {
|
|
j = weight[i] >> 8;
|
|
j = 1 + (j / 2);
|
|
weight[i] = j << 8;
|