Karl Berry [Mon, 28 Sep 2009 09:10:16 +0000 (11:10 +0200)]
doc: update gzip.texi
* doc/gzip.texi: FDL 1.3+
Consistently (de)capitalize section names.
"User's" is not correct; seems best to simplify the title.
Throw in some "GNU"'s.
Make direntries be what we actually want.
Detabify.
Jim Meyering [Sat, 26 Sep 2009 19:22:02 +0000 (21:22 +0200)]
gzip: don't use an uninitialized file descriptor
gzip interprets an argument of "-" as indicating stdin, but when
"-" is not the first name on the command line, it doesn't work.
* gzip.c (treat_stdin): Initialize "ifd".
Patch and fine description by Lasse Collin in
http://www.mail-archive.com/bug-gzip@gnu.org/msg00213.html
* Makefile.am (check-local): Exercise the fix. Based on the above.
* NEWS (Bug fixes): Mention this.
Thiemo Nagel [Sun, 16 Aug 2009 14:48:37 +0000 (16:48 +0200)]
avoid creating an undersized buffer for the hufts table
A malformed input file can cause gzip to crash with a segmentation
violation or hang in an endless loop.
Reported in <http://bugs.debian.org/507263>.
* NEWS (Bug fixes): Mention it.
Jim Meyering [Sun, 16 Aug 2009 09:39:07 +0000 (11:39 +0200)]
avoid silent data loss e.g., on NFS, due to unchecked close of stdout
* gzip.c: Include "closein.h".
(main): Use atexit (close_stdin);
* bootstrap.conf (gnulib_modules): Add closein.
Prompted by Mark Kidwell's report and patch in
http://bugs.debian.org/538187
* NEWS (Bug fixes): Mention it.
* */.gitignore: Update.
Jim Meyering [Sun, 16 Aug 2009 08:51:19 +0000 (10:51 +0200)]
build: avoid non-srcdir build failure
* Makefile.am (gzip.doc.gz): Use $(srcdir)/gzip.doc, not gzip.doc.
Don't redirect directly to $@. Use $(AM_V_GEN).
(gzip.doc, .in): Don't redirect directly to $@. Use $(AM_V_GEN).
* NEWS: Add template header for upcoming release.
* configure.ac (AC_INIT): Use git-version-gen.
Use AM_SILENT_RULES([yes]).
(AM_INIT_AUTOMAKE): Drop gnits; conflicts with git-version-gen versions.
* bootstrap.conf (gnulib_modules): Use getopt-gnu
Ensure ChangeLog exists, for automake.
rather than obsolete "getopt" module.
Add gitlog-to-changelog.
Add git-version-gen.
Add gnu-make, gnumakefile and maintainer-makefile.
* Makefile.am (dist-hook, gen-ChangeLog): New rules, to generate
ChangeLog and insert it into the distribution tarball.
(EXTRA_DIST): Add ChangeLog-2007.
Paul Eggert [Sun, 25 Nov 2007 17:19:45 +0000 (17:19 +0000)]
* gzip.c (handled_sig): Move out of install_signal_handlers, and
move previous to all uses of SIGPIPE, to fix a bug encountered when
porting to mingw32. Reported by Robert Millan in
<http://lists.gnu.org/archive/html/bug-gzip/2007-11/msg00007.html>.
Paul Eggert [Thu, 4 Oct 2007 22:25:07 +0000 (22:25 +0000)]
* Makefile.am (gzip.doc.gz, check-local): Depend on $(bin_PROGRAMS).
(gzip.doc.gz): Use our gzip, not the system-installed one.
Problem reported by Chris Staub in
<http://lists.gnu.org/archive/html/bug-gzip/2007-10/msg00000.html>.
Paul Eggert [Mon, 7 May 2007 23:24:54 +0000 (23:24 +0000)]
* NEWS: 'gzip -f foo.gz' now works instead of complaining.
* gzip.c (make_ofname): Implement this.
Problem reported by Sven Hartrump in
<http://lists.gnu.org/archive/html/bug-gzip/2007-05/msg00003.html>.
* NEWS, gzip.1: Document that case is ignored when looking at file name
extensions.
* doc/gzip.texi (Overview): Likewise.
Paul Eggert [Fri, 4 May 2007 19:53:25 +0000 (19:53 +0000)]
* Makefile.am (.in): Substitute @bindir@, not BINDIR, for
consistency with other substitutions.
(check-local): Use --__bindir . rather than setting GZIP_BINDIR=.,
to allay security concerns voiced by Joerg Lehners in
<http://lists.gnu.org/archive/html/bug-gzip/2007-04/msg00003.html>.
* gunzip.in, gzexe.in, zcat.in, zcmp.in, zdiff.in, zegrep.in, zfgrep.in:
* zforce.in, zgrep.in, zless.in, zmore.in, znew.in:
Support --__bindir rather than GZIP_BINDIR.
* gunzip.in, zcat.in, zcmp.in: Support --help and --version
directly, to avoid some confusion in help and version output.
Problem reported by Eric Blake in
<http://lists.gnu.org/archive/html/bug-gzip/2007-04/msg00006.html>.
Paul Eggert [Sun, 29 Apr 2007 05:24:26 +0000 (05:24 +0000)]
* m4/shell.m4 (AC_PROG_SHELL): Check for old-fashioned shells that
don't allow "(" in front of case labels. Problem reported by midair
in <http://lists.gnu.org/archive/html/bug-gzip/2007-04/msg00004.html>.
Also, check for buggy shells that require ";;" before "esac".
Paul Eggert [Tue, 20 Mar 2007 05:09:51 +0000 (05:09 +0000)]
* README-hacking: New file, renamed from README-cvs.
* README-cvs: Remove.
* bootstrap: Sync from today's gnulib.
* bootstrap.conf (gnulib_modules): Add 'time'.
* gzip.c: Don't include timespec.h; 'time' fixes time.h for that.
* zip.c: Likewise.
* gzip.c: Don't include time.h or sys/time.h; gzip.h now includes
time.h, which is now enough.
* gzip.h: Include <time.h>.
Paul Eggert [Fri, 16 Mar 2007 18:48:58 +0000 (18:48 +0000)]
* README (WARNING): Reword to avoid mention of no-longer-existing
section in INSTALL file. Problem reported by Paul Townsend in
<http://lists.gnu.org/archive/html/bug-gzip/2007-03/msg00000.html>.
Paul Eggert [Mon, 12 Feb 2007 05:24:34 +0000 (05:24 +0000)]
* gzip.c (foreground): Initialize to zero. This doesn't fix a bug
since C guarantees it's zero, but it's more consistent with the
rest of the code. Problem reported by Mark Adler.
Paul Eggert [Thu, 8 Feb 2007 22:54:59 +0000 (22:54 +0000)]
* zdiff.in: Don't use '((' in a shell script, as it's not portable
to some ksh implementations, e.g., Solaris 10 ksh M-11/16/88i.
Problem reported by Nelson H. F. Beebe in
<http://lists.gnu.org/archive/html/bug-gzip/2007-02/msg00005.html>.
Paul Eggert [Mon, 5 Feb 2007 20:54:25 +0000 (20:54 +0000)]
* gunzip.in, zcat.in, zcmp.in, zegrep.in, zfgrep.in: New files.
* Makefile.am (EXTRA_DIST): Add them.
(bin_SCRIPTS, MOSTLYCLEANFILES): Add gunzip, zcat, zcmp, zdgrep, zfgrep.
(.in): Use GZIP_BINDIR as the location of gzip binaries, if it is set.
(check-local): Use GZIP_BINDIR.
(install-exec-hook, remove-installed-links): Make 'uncompress' an
alias for gunzip.
* gzexe.1: At least one arg is required. Don't give cat as an
example, since gzexe refuses to compress cat due to a bootstrapping
issue. List more utilities in this category.
* gzexe.in, zdiff.in, zforce.in, zgrep.in, zless.in, zmore.in, znew.in:
Report our name in usage.
* gzexe.in: Don't compress bash. Don't use rmdir, so it's
OK to compress rmdir.
* gzip.c: Now requires that you compile with -DGNU_STANDARD=0 to
get non GNU-standard behavior. We now build with GNU-standard
behavior by default, so that programs do not depend on the names
of their executables.
* zdiff.in: Don't depend on the name of the executable, as per
GNU standard. Instead, rely on an internal --__cmp option.
Support ' in options. Check for failures in subsidiary gzip
invocations.
* zgrep.1: Clarify compression issues.
* zgrep.in: Don't assume POSIX-style case syntax. Remove unused var
have_optarg.
* zless.1: zless sets LESSMETACHARS now.
Paul Eggert [Thu, 11 Jan 2007 05:59:16 +0000 (05:59 +0000)]
* m4/shell.m4 (AC_PROG_SHELL): Test that $(...) works.
Problem reported for SGI IRIX 6 by Nelson H. F. Beebe in
<http://lists.gnu.org/archive/html/bug-gzip/2007-01/msg00007.html>.
Paul Eggert [Thu, 4 Jan 2007 08:03:20 +0000 (08:03 +0000)]
* zdiff.in (cmp0): New var.
Rewrite test for /dev/fd/3 to detect bugs in Solaris 8
/bin/bash 2.03. Problem reported by Nelson H. F. Beebe in
<http://lists.gnu.org/archive/html/bug-gzip/2007-01/msg00001.html>.
Avoid "for file; do", which doesn't work with Solaris 8 /bin/sh.
Paul Eggert [Thu, 4 Jan 2007 05:24:04 +0000 (05:24 +0000)]
* zdiff.in: Test /dev//fd/3, not /dev/fd/3, to work around a problem
with Tru64 4.0F ksh M-11/16/88f reported by Thomas Koutcher in
<http://lists.gnu.org/archive/html/bug-gzip/2007-01/msg00000.html>.
Paul Eggert [Sat, 30 Dec 2006 04:06:44 +0000 (04:06 +0000)]
* zless.in: Work around a bug in less 394 and earlier; it
mishandles $%=~ in file names. Problem reported by
Sami Liedes in <http://bugs.debian.org/383358>.
* zgrep.in: Rewrite to make the option processing more
compatible with GNU and POSIX grep. Assume POSIX shell
for more stuff, since we're already assuming that.
* Makefile.am (check-local): Check zgrep -iV.
Paul Eggert [Wed, 27 Dec 2006 08:00:43 +0000 (08:00 +0000)]
* NEWS: gzip -q now exits with status 2 (not 1) on SIGPIPE.
zgrep has many bugs fixed with argument handling, special characters,
and exit status.
* gzip.c (abort_gzip_signal): Implement gzip -q change.
* zgrep.in: Implement zgrep change.
Paul Eggert [Sun, 24 Dec 2006 05:45:23 +0000 (05:45 +0000)]
* NEWS: Fix bug reported by Martin Mares in
<http://bugs.debian.org/177942>.
* gzip.c (treat_stdin): Remove NO_STDIN_FSTAT and NO_PIPE_TIMESTAMP
stuff. It didn't work (led to syntax errors) and was confusing.
Report an error if stdin cannot be statted even if !list && no_time.
Get stdin's size if it is regular.
(treat_file): Do not report an error with setuid, setgid,
sticky, or non-regular, non-directory files if to_stdout.
Allow 'force' to override the caution about sticky files.
Use the same form for time stamps that treat_stdin uses.
Paul Eggert [Sun, 24 Dec 2006 04:14:57 +0000 (04:14 +0000)]
* zdiff.in: Fix typo that broke most usages. Problem reported by
Jari Aalto in <http://bugs.debian.org/404114>. While we're at it,
fix a bunch of other problems. Handle "-" better. Send
diagnostics to stderr, not stdout. Use expr rather than echo |
sed, to handle special characters better. Report a diagnostic in
the 1-arg case, if the argument doesn't end in .gz or the like,
rather than having incomprehensible behavior. Do not require that
the inputs be regular files. Avoid creating a temporary entirely,
if /dev/fd works. If not, then resist denial-of-service attacks
better, by using mktemp.
* Makefile.am (gzip.doc.gz): New rule.
(check-local): Depend on it, and test zdiff for Debian bug 404114.
Paul Eggert [Sat, 23 Dec 2006 01:02:17 +0000 (01:02 +0000)]
* zdiff.1: Mention that these programs currently understand only
formats that gzip does. Problem reported by Jari Aalto in
<http://bugs.debian.org/404099>.
Paul Eggert [Wed, 20 Dec 2006 23:30:17 +0000 (23:30 +0000)]
* inflate.c (huft_build): Fix regression that caused gzip to
refuse to uncompress null input (all zero length codes). Problem
reported by Yiorgos Adamopoulos. This regression was caused by
the security patch installed 2006-11-20, which in turn came from
Debian, which in turn apparently came from Thomas Biege of SuSe.
Paul Eggert [Fri, 15 Dec 2006 08:18:02 +0000 (08:18 +0000)]
* NEWS, configure.ac (AC_INIT):
Version 1.3.9 released.
* bootstrap (gnulib_tool_options_extras): New var.
(gnulib_tool_options): Use it.
* bootstrap.conf (gnulib_tool_options_extras): Avoid getline and
rpmatch. gzip doesn't need them, since it doesn't ENABLE_NLS.
Paul Eggert [Thu, 14 Dec 2006 02:12:30 +0000 (02:12 +0000)]
* configure.ac: Use $CPPFLAGS everywhere $CPP is used, and use
$CPPFLAGS $CFLAGS everywhere $CC is used.
* lib/Makefile.am (match.$(OBJEXT)): Likewise.
* configure.ac: Test the exit code of the $CPP and $ASCPPPOST commands
separately.
Paul Eggert [Mon, 11 Dec 2006 18:54:39 +0000 (18:54 +0000)]
The SSIZE_MAX fix didn't work on NSK, so fix it in a more-reliable
(albeit more-complicated) way. Problem reported by Matthew Woehlke.
* gzip.h (read_buffer): New decl.
* unlzw.c (unlzw): Use read_buffer rather than read.
* zip.c (file_read): Likewise.
* util.c (copy, fill_inbuf): Likewise.
(read_buffer, write_buffer): New functions.
(write_buf): Use write_buffer rather than write.
Undo the previous SSIZE_MAX-related change; it didn't work.
* gzip.c: Include <limits.h>.
* util.c: Likewise.
* gzip.h: Don't include <limits.h>.
(INBUFSIZ): Don't worry about SSIZE_MAX here.
Paul Eggert [Sat, 9 Dec 2006 06:58:27 +0000 (06:58 +0000)]
* gzexe.in (mktemp_status): New var, used to see whether
mktemp is a known command. Use this instead of confounding
mktemp's existence with its success.
Paul Eggert [Sat, 9 Dec 2006 04:25:56 +0000 (04:25 +0000)]
* zdiff.in: Remove first line containing ":". This follows
up on the SEDCMD fix of 2006-12-01.
* zforce.in: Likewise.
* zgrep.in: Likewise.
* zless.in: Likewise.
* zmore.in: Likewise.
* znew.in: Likewise.
Paul Eggert [Sat, 9 Dec 2006 01:19:52 +0000 (01:19 +0000)]
Fix problems in porting to NSK reported by Matthew Woehlke in
<http://lists.gnu.org/archive/html/bug-gzip/2006-12/msg00025.html> and
<http://lists.gnu.org/archive/html/bug-gzip/2006-12/msg00027.html>.
* gzip.h: Include <limits.h>, for SSIZE_MAX.
(INBUFSIZE): Don't make it any larger than SSIZE_MAX.
Problem reported by Matthew Woehlke in
<http://lists.gnu.org/archive/html/bug-gzip/2006-11/msg00013.html>.
* gzip.c: Don't include <limits.h>, as gzip.h now does this.
* util.c: Likewise.
* gzip.c (main): Set exiting_signal before installing signal handlers.
(install_signal_handlers): Don't set exiting_signal here. This
fixes a C99ism.
* zip.c: Include timespec.h, for time_stamp type.
Paul Eggert [Fri, 8 Dec 2006 09:30:30 +0000 (09:30 +0000)]
* configure.ac (for assembler): Set ASFLAGS_config to
-Wa,--noexecstack if this seems advisable on this platform.
Problem reported by Mike Frysinger in
<http://lists.gnu.org/archive/html/bug-gzip/2006-12/msg00018.html>.
* lib/Makefile.am (match.$(OBJEXT)): Use ASFLAGS_config.
Paul Eggert [Thu, 7 Dec 2006 23:53:00 +0000 (23:53 +0000)]
* deflate.c (deflate_fast, deflate): Avoid core dump. Problem
originally reported by Jochen Friedrich and trivial patch supplied
by Anthony Towns; see <http://bugs.debian.org/184057>.
Paul Eggert [Thu, 7 Dec 2006 06:58:13 +0000 (06:58 +0000)]
* NEWS: Document the fixes below.
* configure.ac (AC_CHECK_FUNCS_ONCE): Add siginterrupt.
* gzip.c (lstat) [!defined(HAVE_LSTAT) && !defined(lstat)]: Remove.
(SA_NOCLDSTOP, sigprocmask, sigset_t) [!defined SA_NOCLDSTOP]:
New macros.
(siginterrupt) [!defined SA_NOCLDSTOP && ! HAVE_SIGINTERRUPT]:
New macro.
(HAVE_WORKING_O_NOFOLLOW): Define to 0 if not defined.
(caught_signals, exiting_signal, remove_ofname_fd): New vars.
(remove_ofname): Remove; all uses changed to remove_ofname_fd.
(same_file, name_too_long): Remove.
(install_signal_handlers): New function. It prefers sigaction,
which is more reliable in the presence of race conditions.
Catch SIGXCPU and SIGXFSZ, too.
(main): Use it instead of installing them by hand.
(treat_file): Check for read error when closing ifd.
(treat_file, create_outfile, remove_output_file):
Avoid race conditions with signals.
(create_outfile, check_ofname): Remove most of the gorp about
working around ENAMETOOLONG deficiencies. It's obsolete now, and
anyway it had race conditions. Just rely on O_EXCL and
ENAMETOOLONG. The worst that can happen is that a file name will
be silently truncated on an obsolete machine, but no data will be lost.
(open_and_stat): Use HAVE_WORKING_O_NOFOLLOW rather than O_NOFOLLOW
to work around some O_NOFOLLOW bugs. Otherwise, fall back on
lstat only if lstat is available, as symlinks don't exist otherwise.
(open_input_file): Use O_NONBLOCK and O_NOCTTY too, to avoid
hanging gzip on special files.
(abort_gzip_signal): If sigaction is not available, ignore
signals. If we get the exiting signal, exit with ERROR status
rather than raising a signal.
* tailor.h (NO_ST_INO): Remove; no longer used now that same_file
is gone.
Paul Eggert [Wed, 6 Dec 2006 04:04:22 +0000 (04:04 +0000)]
Port to Tandem NSK/OSS, which lacks fchdir. Problem reported by
Matthew Woehlke in
<http://lists.gnu.org/archive/html/bug-gzip/2006-11/msg00013.html>.
* bootstrap.conf (gnulib_modules): Remove openat, as it pulls in
fchdir.
* configure.ac: Check for fdopendir.
* gzip.c: Don't include openat.h; no longer needed.
(treat_dir) [!HAVE_FDOPENDIR]: Fall back on the old opendir method
since fdopendir is not available.
Paul Eggert [Tue, 5 Dec 2006 07:45:00 +0000 (07:45 +0000)]
* NEWS: Describe the following change briefly.
* bootstrap.conf (gnulib_modules): Remove stat-macros; no longer
needed.
* gzip.c: Don't include stat-macros.h; no longer needed.
(treat_file): Refuse to compress files that are setuid, or setgid,
as this can in theory lead to security holes. Also, refuse to
compress files with the sticky bit set, on general principle.
(copy_stat): Don't copy the setuid, setgid, or sticky bits,
as (given the above change) they'll always be zero here.
Invoke chmod before chown, to close a race condition.
Paul Eggert [Fri, 1 Dec 2006 20:52:52 +0000 (20:52 +0000)]
* NEWS: Describe gzexe changes noted below.
* Makefile.am (.in): Don't bother with SEDCMD. This stuff isn't needed
any more (the hosts it caters to are long extinct), and was questionable
anyway since the code assumes the skip= line was line 2.
* configure.ac (AC_SYS_INTERPRETER, SEDCMD): Remove; no longer needed.
* gzexe.in: Sweep the code and fix some bugs.
My, what sharp teeth you have, gzexe!
The straw that broke this camel's back was Matthew Burgess's bug report
<http://lists.gnu.org/archive/html/bug-gzip/2006-11/msg00012.html>.
(IFS): Set it to the standard value, both here and in the
script gzexe generates.
Check for missing operand after parsing options, not before.
This fixes the case for "cpexe --".
Check for tail -n problem separately in gzexe and in the executable
it generates, in case it's a different 'tail'.
(trap): Remove $tmp only if $tmp is not the empty string.
Preserve exit status.
Don't use the nonstandard (and rarely available) "cpmod" utility.
Don't use "set -C"; it's no longer useful and it breaks things
in some cases.
(main loop): Handle file names beginning with "-".
Exit with status of failing program, not with 1.
Fix some bugs in printing diagnostics, and in quoting.
Require the skip= line to have at least one digit.
Use test -u and test -g rather than using the (less-reliable) ls.
Refuse to compress more programs, e.g., sh.
Use mktemp rather than tempfile. Build a copy of
the compressed or uncompressed executable in the same
directory as the executable, as that's less likely to go wrong
if disk space is low. Have the executable exit with status 127,
not 1, if the decompression process fails; this is more compatible
with meta-programs like nohup. Have the executable
uncompress to a temp file with the same basename as the executable;
this is more likely to go right. Fix a race condition where the
executable temporarily did not exist (in either old or new forms).
Check for race conditions better when mv fails. Do not attempt
to use cp to do the real work, only to copy permissions to a temp
file, since we don't want to trash running executables.
Paul Eggert [Sun, 26 Nov 2006 20:48:29 +0000 (20:48 +0000)]
* zgrep.in: If the file name contains newline, &, \, or |, escape
the character so that 'sed' doesn't mishandle it as a replacement.
Problem reported by Bdale Garbee.