gzip -cdf mishandles some concatenated input streams: test it
authorJim Meyering <meyering@redhat.com>
Tue, 2 Feb 2010 07:19:36 +0000 (08:19 +0100)
committerJim Meyering <meyering@redhat.com>
Wed, 3 Feb 2010 05:28:59 +0000 (06:28 +0100)
* tests/mixed: Exercise "gzip -cdf" bug.
* Makefile.am (XFAIL_TESTS): Add it.
Mark Adler reported the bug.

Makefile.am
tests/mixed [new file with mode: 0644]

index b4e75fc4054abf25a5f33d1fc413faca01de7c31..4263b1d757c889c3b236ae36e2b7f4b2a060b03f 100644 (file)
@@ -99,6 +99,9 @@ check-local: $(FILES_TO_CHECK) $(bin_PROGRAMS) gzip.doc.gz
        done
        @echo 'Test succeeded.'
 
+XFAIL_TESTS =                                  \
+  tests/mixed
+
 TESTS =                                                \
   tests/helin-segv                             \
   tests/hufts                                  \
diff --git a/tests/mixed b/tests/mixed
new file mode 100644 (file)
index 0000000..0ca8e80
--- /dev/null
@@ -0,0 +1,52 @@
+#!/bin/sh
+# Ensure that gzip -cdf handles mixed compressed/not-compressed data
+# Before gzip-1.5, it would produce invalid output.
+
+# Copyright (C) 2010 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# limit so don't run it by default.
+
+if test "$VERBOSE" = yes; then
+  set -x
+  zgrep --version
+fi
+
+: ${srcdir=.}
+. "$srcdir/tests/init.sh"
+
+printf 'xxx\nyyy\n'      > exp2 || framework_failure
+printf 'aaa\nbbb\nccc\n' > exp3 || framework_failure
+
+fail=0
+
+(echo xxx; echo yyy) > in || fail=1
+gzip -cdf < in > out || fail=1
+compare out exp2 || fail=1
+
+# Uncompressed input, followed by compressed data.
+(echo xxx; echo yyy|gzip) > in || fail=1
+gzip -cdf < in > out || fail=1
+compare out exp2 || fail=1
+
+# Compressed input, followed by regular (not-compressed) data.
+(echo xxx|gzip; echo yyy) > in || fail=1
+gzip -cdf < in > out || fail=1
+compare out exp2 || fail=1
+
+(echo xxx|gzip; echo yyy|gzip) > in || fail=1
+gzip -cdf < in > out || fail=1
+compare out exp2 || fail=1
+
+Exit $fail