Paul Eggert [Sat, 8 Dec 2012 18:45:18 +0000 (10:45 -0800)]
diagnose unexpected EOF and zero lengths in packed data
Problem reported by Aki Helin.
* NEWS: Mention Aki's reports.
* tests/unpack-invalid: New file,
with test data suggested by Aki.
* tests/Makefile.am (TESTS): Add it.
* unpack.c (read_byte): New function.
(look_bits, read_tree): Use it.
(read_tree): Check against zero bit length Huffman code.
Paul Eggert [Fri, 16 Nov 2012 22:05:34 +0000 (14:05 -0800)]
gzip: diagnose invalid code in packed data
* unpack.c (unpack): When encountering a code out of range, report
it and fail rather than charging ahead with randomish output.
Problem reported by Aki Helin.
Paul Eggert [Fri, 16 Nov 2012 19:44:06 +0000 (11:44 -0800)]
maint: merge build improvements from coreutils
* configure.ac: Invoke gl_ASSERT_NO_GNULIB_POSIXCHECK.
(--enable-gcc-warnings): Change help message.
(gl_GCC_VERSION_IFELSE): New macro.
Do not omit -Wunused-macros for main code.
Adjust other -W options as per coreutils.
* lib/Makefile.am (AM_CFLAGS): Use GNULIB_WARN_CFLAGS, not WARN_CFLAGS.
* unlzw.c (REGISTERS, REG1, REG2, ..., REG16): Remove.
All uses removed. These provoked -Wunused-macros warnings.
This sort of fiddling with registers hasn't been needed for years.
Paul Eggert [Fri, 16 Nov 2012 18:54:23 +0000 (10:54 -0800)]
doc: bring up to date and fix troff typos
* doc/gzip.texi (Overview): Update RFC URLs.
* gzip.1: Likewise. Don't say "SEE ALSO" to programs that almost
nobody has installed anymore.
* gzip.1, zmore.1: Fix some troff typos.
* zdiff.1: Clarify what happens with input files. Don't talk
about temporary file names, as they're rarely used these days.
Paul Eggert [Wed, 24 Oct 2012 22:37:01 +0000 (15:37 -0700)]
tests: exercise the grep -e portability fix
Remove workaround for Solaris, since the bug should be fixed now.
Suggested by Petr Sumbera in
<http://lists.gnu.org/archive/html/bug-gzip/2012-10/msg00005.html>.
* tests/zgrep-context, tests/zgrep-f: All uses removed.
* tests/init.cfg (require_POSIX_grep_): Remove.
Eric Blake [Tue, 23 Oct 2012 09:06:11 +0000 (11:06 +0200)]
build: default to --enable-gcc-warnings in a git tree
Anyone building from cloned sources can be assumed to have a new
enough environment, such that enabling gcc warnings by default will
be useful. Tarballs still default to no warnings, and the default
can still be overridden with --disable-gcc-warnings.
* configure.ac (gl_gcc_warnings): Set default based on environment.
Paul Eggert [Sun, 21 Oct 2012 06:15:26 +0000 (23:15 -0700)]
zgrep: do not assume standard 'grep' has -e
On Solaris 11, /usr/bin/grep -e does not work.
Problem reported by Petr Sumbera in
<http://lists.gnu.org/archive/html/bug-gzip/2012-10/msg00003.html>.
* Makefile.am (.in): Substitute @GREP@.
* configure.ac (AC_PROG_GREP): Invoke.
* zgrep.in (grep): Use @GREP@.
Paul Eggert [Wed, 15 Aug 2012 03:43:16 +0000 (20:43 -0700)]
zgrep: do not assume GNU expr
* zgrep.in: Do not assume '\+' has the GNU behavior in the BRE
given to 'expr', as POSIX does not guarantee that. Come to think
of it, use a shell pattern rather than 'expr', as this is more
efficient.
Paul Eggert [Wed, 20 Jun 2012 00:22:52 +0000 (17:22 -0700)]
zmore: rewrite to fix bugs and assume POSIX
Problem reported for Solaris 9 by Daniel in
<http://lists.gnu.org/archive/html/bug-gzip/2012-06/msg00007.html>.
Rather than figure out what exactly went wrong in Solaris 9
it was easier to rip out all the buggy compatibility and stty cruft.
* zmore.in: Don't use stty or trap; simply pipe the output to 'more'
and let it deal with signals and terminal control.
Use printf, not 'echo', to avoid problems with backslashes.
Don't assume ANS is not 's' in the environment.
Use a 'more'-style header instead of rolling our own style.
Paginate the header, too; the old behavior lost the header.
* NEWS, zmore.1: Document this.
Paul Eggert [Tue, 24 Apr 2012 16:16:17 +0000 (09:16 -0700)]
gzip: port gzip -rf to ZFS
Problem reported privately by Rich Burridge.
* bootstrap.conf: Add savedir.
* gzip.c: Include <savedir.h>.
(_D_EXACT_NAMELEN): Remove.
(treat_dir): Use savedir rather than reading directory entries one
at a time, to avoid revisiting an already-compressed file when using
ZFS and the -rf flags are specified.
* lib/.gitignore, m4/.gitignore: Ignore savedir-related files.
Jim Meyering [Wed, 11 Jan 2012 20:31:50 +0000 (21:31 +0100)]
build: accommodate newer bootstrap from gnulib
* bootstrap.conf (gnulib_tool_option_extras): Add both --symlink
and --makefile-name=gnulib.mk.
* bootstrap: Update from gnulib.
* tests/init.sh: Update from gnulib.
* lib/Makefile.am: Initialize all of the following so that
generated code in gnulib.mk may use += to append to those variables:
AM_CFLAGS, BUILT_SOURCES, CLEANFILES, EXTRA_DIST, MOSTLYCLEANDIRS,
MOSTLYCLEANFILES, SUFFIXES, noinst_LTLIBRARIES.
Paul Eggert [Thu, 22 Dec 2011 00:11:43 +0000 (16:11 -0800)]
zless: decompress stdin too, if less 429 or later
* zless.in: Use LESSOPEN |- feature of less 429 or later.
Problem reported by Jeroen Roovers via Mike Frysinger in
<http://lists.gnu.org/archive/html/bug-gzip/2011-12/msg00006.html>.
Jim Meyering [Tue, 29 Nov 2011 17:33:31 +0000 (18:33 +0100)]
build: accommodate gnulib's new warnings with --enable-gcc-warnings
* configure.ac (WERROR_CFLAGS): Disable two new warnings:
-Wno-format-nonliteral, -Wno-unsuffixed-float-constants.
* gzip.h (bi_reverse): Declare with _GL_ATTRIBUTE_CONST.
(gzip_base_name): Declare with _GL_ATTRIBUTE_PURE.
Jim Meyering [Tue, 29 Nov 2011 17:14:02 +0000 (18:14 +0100)]
tests: use "compare exp out", not "compare out exp"
Likewise, when an empty file is expected, use "compare /dev/null out",
not "compare out /dev/null". I.e., specify the expected/desired contents
via the first file name. Prompted by a suggestion from Bruno Haible
in http://thread.gmane.org/gmane.comp.gnu.grep.bugs/4020/focus=29154
Jim Meyering [Sat, 14 May 2011 10:56:08 +0000 (12:56 +0200)]
build: avoid link failure on at least i386-FreeBSD7.2
* deflate.c (match_start, prev_length, max_chain_length): Do not
declare these as static. On some types of system/arch, they are
used via match_.s.
* cfg.mk (_gl_TS_unmarked_extern_vars): Mark those three variables
as known-extern: match_start, prev_length, max_chain_length.
Jim Meyering [Fri, 13 May 2011 08:58:24 +0000 (10:58 +0200)]
maint: use gnulib's new readme-release module
* bootstrap.conf (gnulib_modules): Add readme-release.
(bootstrap_epilogue): Add the recommended perl one-liner.
* README-release: Remove file; it is now generated from gnulib.
* .gitignore: Add it.
Jim Meyering [Mon, 9 May 2011 07:00:19 +0000 (09:00 +0200)]
maint: limit scope of several functions
* deflate.c (longest_match): Move extern declaration into #if-ASMV block.
[!ASMV]: Define as static.
* inflate.c: Remove unnecessary prototypes.
ANSI-declify functions and declare them to be static.
Jim Meyering [Mon, 9 May 2011 06:02:49 +0000 (08:02 +0200)]
maint: prepare for tight-scope rule: use noinst_HEADERS
* Makefile.am (EXTRA_DIST): Move lzw.h and gzip.h from here to ...
(noinst_HEADERS): ...here.
For convenience, since the tight-scope rule uses $(noinst_HEADERS).
Jim Meyering [Sun, 20 Mar 2011 08:53:04 +0000 (09:53 +0100)]
maint: stop using .x-sc_* files to list syntax-check exemptions
Instead, use the new mechanism with which you merely use a
variable (derived from the rule name) defined in cfg.mk to an ERE
matching the exempted file names.
* gnulib: Update to latest, to get maint.mk that implements this.
* .x-sc_file_system: Remove file.
* .x-sc_prohibit_tab_based_indentation: Likewise.
* .x-sc_require_config_h: Likewise.
* .x-sc_require_config_h_first: Likewise.
* cfg.mk: Define variables to exempt the same files.
Paul Eggert [Wed, 10 Nov 2010 08:57:49 +0000 (00:57 -0800)]
zgrep: don't assume traditional behavior with signal numbers
* zgrep.in: Don't assume the exit status is the signal number plus
128, as POSIX doesn't require this. No need to kill self; exiting
with large status is enough. Propagate all exit statuses greater
than 1, not merely those in the range 129..143, as there's no need
to treat that range specially (and it's not portable anyway).
Paul Eggert [Tue, 9 Nov 2010 21:17:57 +0000 (13:17 -0800)]
zgrep: fix shell portability bug with -f; fix mishandling of "-e -"
* tests/zgrep-f: Check for "zgrep -e -" bug, too.
* zgrep.in: Don't assume that if the shell redirects fd 6, then
this redirection is visible to the subsidiary grep. POSIX doesn't
guarantee this visibility except for file descriptors 0, 1, and 2,
and ksh does not support it. Problem reported by Thomas Schulz in
<http://lists.gnu.org/archive/html/bug-gzip/2010-11/msg00000.html>.
Also, fix a related bug: "-e -" was mishandled. These two bugs
were introduced by commit 5b54db4546b84ec97ff57a62f8ddb98faacf77f2
dated 2009-10-09.
(escape): Change the convention: do not assume that a stray X
is present at the end of the last line. All uses changed.
There was no longer any need for this convention, and fixing this
made it a bit easier to use 'sed' in a later part of the fix.
Paul Eggert [Mon, 8 Nov 2010 16:06:15 +0000 (08:06 -0800)]
maint: fix copyright dates that were munged by a maintenance script
* gunzip.in, gzexe.in, zcat.in, zcmp.in, zdiff.in, zforce.in:
* zgrep.in, zless.in, zmore.in, znew.in:
A script went awry when updating copyright dates in gzip's shell
scripts. It should update comments to look like "# Copyright (C)
2007, 2010 Free Software Foundation, Inc." (with a set of years)
and version messages to look like "Copyright (C) 2010 Free
Software Foundation, Inc." (with just the most-recent year).
Instead, it sometimes ignored one, sometimes the other, and
typically put ranges into version messages. Fix all this stuff by
hand, using dates that I divined from the change logs (so they're
a bit more accurate than script-generated dates). We need to fix
the script before it runs in 2011.
Paul Eggert [Wed, 15 Sep 2010 17:55:19 +0000 (10:55 -0700)]
zgrep: fix parsing of -Eh options
* zgrep.in: Update list of single-letter options to match what's
in GNU grep. Add -h as an alias for --no-filename. Bug reported
by Vladimir Sidorenko in
<http://lists.gnu.org/archive/html/bug-gzip/2010-09/msg00007.html>.
Paul Eggert [Tue, 17 Aug 2010 10:05:56 +0000 (03:05 -0700)]
gzip: fix NO_SIZE_CHECK for VMS
* gzip.c (do_list): Use if, not #if.
* tailor.h (NO_SIZE_CHECK) [defined(VAXC) || defined(VMS)]: Define.
* zip.c (zip): Simplify conditional, which was incorrect at any rate
for VMS.
Paul Eggert [Sun, 15 Aug 2010 23:27:06 +0000 (16:27 -0700)]
algorithm.doc: mention Internet RFC 1952 and modernize a bit
* algorithm.doc: Update to mention header-CRC and Internet RFC 1952.
Also, remove the crypto stuff, which never worked.
Inspired by that same suggestion of Greg Roelofs.
Paul Eggert [Sun, 15 Aug 2010 22:50:12 +0000 (15:50 -0700)]
gzip: Use 0x%04x instead of %x when printing 16-bit checksums
* gzip.c (get_method): Use 0x%04x, not %x, to print 16-bit checksums.
Inspired by a suggestion of Greg Roelofs in
http://lists.gnu.org/archive/html/bug-gzip/2010-08/msg00004.html
Paul R. Eggert [Mon, 19 Jul 2010 17:22:10 +0000 (10:22 -0700)]
gzip: don't assume C99, and don't assume overlapping memcpy should work
* tailor.h (NOMEMCPY): Remove. memcpy is entitled to not work
on overlapping blocks.
* inflate.c (inflate_codes): Don't put decl after statement.
Omit NOMEMCPY.
Paul Eggert [Sat, 3 Jul 2010 03:41:11 +0000 (20:41 -0700)]
Decode FHCRC flag properly, as per Internet RFC 1952.
Problem reported by Greg Roelofs in:
http://lists.gnu.org/archive/html/bug-gzip/2010-06/msg00003.html
* gzip.c (discard_input_bytes): New function.
(get_method): Check header checksum, if given. We never generate it,
but other programs may.
* gzip.h (HEADER_CRC): Renamed from CONTINUATION. All uses changed.
* tailor.h [defined __50SERIES]: Remove PRIMOS stuff that was obsolete
anyway and would have made this patch harder to maintain.
(get_char, put_char): Remove.
* zip.c (zip): Use put_byte instead of the now-removed put_char.