Commit Graph

73 Commits

Author SHA1 Message Date
mrg cde2923d5b avoid an infinite loop while decompressing invalid gzip files.
some minor CSE.  compare stat return value consistently.

thanks to tron for testing the first change.
2005-08-28 10:17:50 +00:00
lukem 6b5252b15f Fix numerous uninitalized variables.
Detected with gcc -Wuninitialized.
2005-06-02 01:51:58 +00:00
yamt 751e975bfc handle partial reads. PR/29484. 2005-02-22 21:45:44 +00:00
enami 4cc9b2f8f4 Fix parsing of $GZIP so that not to overrun the end of string.
Addesses PR#28779.  Fix is slightly different that suggested in the PR
since it fails if $GZIP contains whitespace.
2005-01-31 09:11:49 +00:00
jmc 40c0737463 Fixed for PR#28581. If stdin is the input stream, fstat it and check if it's
file. If so, use it's mtime for the mtime in the header. Otherwise use
time(2)'s result instead. Lines up with GNU gzip and RFC 1952 now as well.
2004-12-08 06:38:40 +00:00
dsl 2c25900b60 Don't abort decompression if there are no bytes in the output buffer
when the end of compressed block (ie the crc) is reached.
(ie when decompressing concatenated zipped files).
Fixes PR bin/27153
2004-10-08 12:46:24 +00:00
dsl abc7a82e52 Count the output file size modulo 2^32 so that the check against the size
in the compressed file works for files greater than 4GB.
Fixes the fixable part of bin/26907
2004-09-11 11:07:44 +00:00
dsl 754b92f9b9 The last commit slightly increased the size of gzip - I had thought that
all the install media used the 'SMALL' variant, but this is not the case.
Redo the percentage print code to reduce the size to less than the old version.
Fix another fd leakage (didn't call fclose() if ferror() returned non-zero.
Change some maybe_warn() to maybe_warnx() in places I'm sure errno is undefined.
Call mayber_warn() earlier in other paths so that errno might still be valid.
Make the SMALL and NO_BZIP/COMPRESS_SUPPORT options all compile with WARNS=3.
2004-09-05 21:32:30 +00:00
dsl 434117bcce Set the XFL field of the gzip header to indicate maximum compression or
fast compression.  Fixes PR bin/26812
Add references the the 3 relevant RFCs
2004-09-04 10:48:57 +00:00
he d6cee1d93b Cast field width computed from pointer diff and ssize_t to int.
Fixes build for amd64 and presumably for our other lp64 ports.
2004-08-31 10:14:30 +00:00
dsl d55b8a2190 Redo suffix handling so that gunzip xxx.tgx => xxx.tar
Rework logic of gz_{un}compress to make it much less likely to leak fds
    (at least 2 non-error paths leaked them!)
Make -S ".xyz" and -S "" both do something sensible.
Make in-situ compression work - only lose the file on error.
Pass an open fd to zopen (renamed zdopen) to avoid fd leakage (was badly borked)
Write header into first 64k output block to writes are aligned.
    (more efficient and might avoid some problem with code that doesn't
    like receiving partial buffers)
Check file size on compression - double checks against fs full.
Remove some pointless casts, and otherwise simplify some logic.
2004-08-30 14:36:51 +00:00
he 7ae4fdd283 Instead of placing largish buffers on the stack, use malloc/free.
Fixes compile problem for sun2.
2004-07-16 22:44:01 +00:00
yamt 5e6cd45b9d fix "gzip -lv a.gz" after gzip.c 1.46. 2004-07-12 10:21:11 +00:00
yamt 284b1b2ac6 another warn -> warnx. 2004-07-12 09:58:10 +00:00
mrg 2644272f85 in check_outfile() if the outfile exists and -f was given just delete it.
fixes PR#26251.
2004-07-12 02:50:38 +00:00
yamt bd416872f6 fix descriptor leaks on error. 2004-07-11 22:49:42 +00:00
mrg 668894b1c5 - in gz_uncompress() be sure to do the crc/len recalculation insigned.
fixes PR#26246.
- if crc/len are wrong, be sure to noticed it failed
- in check_suffixes(), be sure not to underrun an array (from yamt)
- don't fail so badly on short header, from and fixes R#26242 (also
  from yamt)
- more underrun avoidance in file_uncompress().  fixes PR#26241.
2004-07-11 14:39:39 +00:00
mrg d44ac40080 check the suffix of the input file ala GNU gzip, and error about it
unless -f is given.  fixes PR#26240
2004-07-11 09:40:51 +00:00
mrg e46324f383 move the crc/len code into their own state's to properly allow the buffer
to be refreshed.  re-fixes regress/usr.bin/gzip/concatenated.
2004-07-11 07:01:03 +00:00
mrg 469c821e42 - check for trunated input.
- check each gzip-part's length against the original and warn if it's
  wrong.  fixes part of PR#26233.
- check the input crc32.  fixes the rest of PR#26233.
2004-07-11 06:20:29 +00:00
mrg 7ed5da7ba5 don't assume Z_STREAM_END means end-of-file. fixes PR#26234. 2004-07-11 05:40:51 +00:00
yamt b6ec63a3cc tailing \n is not needed for vwarn(). 2004-07-10 17:35:59 +00:00
mrg 13e5b34e5b fix "zcat -f" on normal files. fixes PR#26145 2004-07-03 09:39:30 +00:00
mrg 3c372acd10 if there are zero bytes to output, this isn't an error. it's probably
a zero length file.  don't return an error.  this should fix PR#25994.
2004-06-22 12:01:29 +00:00
mrg c6c68fa810 handle_pathname: if it's stdin, return after handling it, rather than
trying to then process "-" as a file afterwards.  fixes PR#25843.
2004-06-07 03:24:01 +00:00
mrg 11153dbc8d - maybe restore the timestamp
- don't create the output file with "-l"

both from geoff wing with a few mods by me.
2004-06-06 12:28:52 +00:00
mrg 9e9fa78434 explicitly lseek() to offset 10 to read the original name. fixes a
latent bug awoken by rev 1.37 (prior versions always left the fd at
this offset purely by chance.)  fixes PR#25824.
2004-06-05 15:47:10 +00:00
mrg 2d5e05af49 - fix "gzip -t" to not output anything by default. PR#25507
- fix any decompression on corrupted gzip files.  PR#25508
- ask to overwrite files if we have a tty, rather than failing the
  operation.  PR#25509.
- clean up maybe_err()/maybe_warn(): use maybe_err() only for fatal
  errors.  maybe_warn() is for processing errors.  this allows
  "gzip -d file1.gz file2.gz" to decompress file2.gz even if file1.gz
  is corrupted, etc.
- change the internal compressor/decompressor API to return "-1" on
  failure, not 0.  this allows for 0-sized files to be decompressed
  correctly.
2004-05-25 04:34:40 +00:00
agc 5fe88849a1 WARNS=3: add some const poisoning, and sort out local variable
definitions shadowing other variables.

Pass storage for file names into the file_compress and file_uncompress
functions, so that we don't run the risk of leaking memory. Remove a global
variable that's no longer needed.
2004-05-21 12:16:10 +00:00
agc f8dc59869d Fix a reference to stale storage on the stack - malloc the new file
name when gunzip'ing via strdup(3).  Fixes a bug whereby the new
filename would appear as gibberish when verbosely gunzipping.

Fix an off-by-one error when allocating the filename with added suffix,
and properly NUL-terminate the new filename.

It's NULL, not 0, in char * assignments - there are some still to do here.
2004-05-17 18:10:33 +00:00
bouyer 41bff69bbe Always initialise savename. Fix gzip -c core dump on sparc (and probably
others). OK'd by mrg@.
2004-05-06 17:43:57 +00:00
mrg 99d2aa3dc3 clean up file descriptor handling. don't lose them... 2004-04-27 13:45:50 +00:00
mrg a9c239e635 - the default compression level in GNU gzip is 6 not 5; copy that default.
- note that -t/-l/-v & bzip2 is not handled the same as gzip in a comment.
2004-04-27 11:26:28 +00:00
mrg b02eba12c2 crank version. 2004-04-27 02:25:06 +00:00
mrg d6dd48bc60 - fix "gunzip file.gz"
- fix "gzip <lots of files>"

both reported by tron@.
2004-04-27 01:23:35 +00:00
mrg 4db02197fc - properly parse --fast/--best/-1..-9 again. noted by taca@.
- minor clean up.
2004-04-26 03:01:55 +00:00
mrg 1d0e9794a0 significantly rototill. don't use the high-level gzio functions
anymore, use the low-level inflate()/deflate() directly.  this
allows support file-type detection on stdin; now can decompress
.Z and .bz2 files fed to stdin (fixes PR#25192) additionally it
makes -v work with stdin or stdout (fixes PR#25215.)

(with these changes, we no longer need gzopenfull(3) in libz.)

thanks to martin@ for the code gzip.c:gz_uncompress() is based on.
2004-04-25 16:20:33 +00:00
mrg 98445d2478 be sure we don't try to remove an output file we haven't actually created.
(reported by kimmo.)
2004-04-12 14:42:14 +00:00
mrg ff187e728e - completely rewrite print_ratio(). fixes PR#25072 and a few other cases
- print_list() was getting the compressed/uncompressed sizes backwards.
2004-04-07 14:25:43 +00:00
mrg 8a618ce17c remove a chunk more code with -DSMALL and in the process fix -DSMALL
that was broken in the previous commit (by exposing "fflag".)
2004-03-31 15:46:25 +00:00
tron 17ebf9b589 Handle files with link count larger than 1 if "-f" option is used. This
is consistent with the old "gzip" and required by "pkgsrc" to implement
"MANZ" properly.
2004-03-31 15:19:14 +00:00
mrg 7149a52947 factor out filetype checking code 2004-03-30 11:42:04 +00:00
mrg d4e27c8dfb use off_t instead of ssize_t in a few places.
fix "gzip -l" in -DSMALL (it wasn't doing a stat(2)).
2004-03-30 09:42:58 +00:00
mrg 70da2f0f10 patch from tron@ to convert to using public bz interfaces. simonb says
no reason not to and this fixes PR#24964.
2004-03-30 09:15:07 +00:00
mrg ed20265f67 shave another 612 bytes off -DSMALL on x86. now x_gzip with -l support
is actually smaller than the older x_gzip without it!
2004-03-28 13:54:44 +00:00
mrg 15fba948a6 still do argv[0] processing -DSMALL, from tsutsui.
pass the smaller list of options to getopt with -DSMALL.
2004-03-28 08:18:14 +00:00
mrg 720263a2ef crank version 2004-03-28 04:13:40 +00:00
mrg d7f0a538e2 remove a bunch more stuff with -DSMALL. now we are about 400 bytes larger
than x_gzip... given we add -l support, time to retire x_gzip/gzip.c.
2004-03-28 04:07:45 +00:00
mrg 57a27c0187 remove another 3KB or so of text/data on i386 with -DSMALL. now only
about 1.1KB larger than the old x_gzip sources, but includes (required
for sysinst) gzip -l support.
2004-03-28 03:47:18 +00:00
tsutsui b6e59003c4 Allow disabling bzip2 (.bz2) and compress (.Z) support
by -DNO_BZIP2_SUPPORT and -DNO_COMPRESS_SUPPORT.
OK'ed by mrg.
2004-03-27 22:33:43 +00:00