diff --git a/tar-1.31-racy-compress-tests.patch b/tar-1.31-racy-compress-tests.patch new file mode 100644 index 0000000..300b626 --- /dev/null +++ b/tar-1.31-racy-compress-tests.patch @@ -0,0 +1,271 @@ +From 9af3ae33108e5a1d281d75d29938fe8c6ffcd218 Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff +Date: Mon, 14 Jan 2019 18:08:21 +0200 +Subject: [PATCH] Fix compression tests + +Existing compression tests used tar with compiled-in defaults. However, +some of the defaults are sure to create archives that are not byte-to-byte +reproducible (e.g. DEFAULT_ARCHIVE_FORMAT=POSIX, because the name field +in posix extended headers uses PID of the creating process by default). +Moreover, some compressors (e.g. gzip) store current timestamp in +the file header when compressing from stdin, so that using cmp on the +two created archives as the tests did is error-prone. Another problem +is that the tests implicitly assumed that tar uses archive suffix to +recognize its format when extracting, which isn't the case. Finally, +there's hardly any reason in using sed to create m4 sources, when +everything can be achieved by m4 itself. + +* tests/Makefile.am: Remove generation of compress-*.at files. +* tests/compress.at.in: Remove. +* tests/compress.m4: New file. +* tests/testsuite.at: Include compress.m4, use TAR_CHECK_COMPRESS to +check compression options. +--- + tests/Makefile.am | 45 ++--------------------------- + tests/compress.at.in | 67 -------------------------------------------- + tests/compress.m4 | 56 ++++++++++++++++++++++++++++++++++++ + tests/testsuite.at | 13 +++++---- + 4 files changed, 65 insertions(+), 116 deletions(-) + delete mode 100644 tests/compress.at.in + create mode 100644 tests/compress.m4 + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 4750acb..a29f626 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -19,7 +19,7 @@ + + EXTRA_DIST = $(TESTSUITE_AT) \ + testsuite package.m4 star/README star/quicktest.sh \ +- compress.at.in ++ compress.m4 + + DISTCLEANFILES = atconfig $(check_SCRIPTS) + MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) +@@ -47,6 +47,7 @@ $(srcdir)/package.m4: $(top_srcdir)/configure.ac + + TESTSUITE_AT = \ + testsuite.at\ ++ compress.m4\ + T-cd.at\ + T-dir00.at\ + T-dir01.at\ +@@ -70,12 +71,6 @@ TESTSUITE_AT = \ + chtype.at\ + comprec.at\ + comperr.at\ +- compress-zstd.at\ +- compress-xz.at\ +- compress-bzip2.at\ +- compress-gzip.at\ +- compress-lzip.at\ +- compress-lzop.at\ + delete01.at\ + delete02.at\ + delete03.at\ +@@ -277,42 +272,6 @@ TESTSUITE_AT = \ + selacl01.at\ + capabs_raw01.at + +-CLEANFILES += compress-zstd.at +-compress-zstd.at: compress.at.in +- $(AM_V_GEN)rm -rf $@ $@-t +- $(AM_V_at)sed 's/@tool@/zstd/g;s/@suff@/zst/g;s/@suff2@/tzst/g;' \ +- $(srcdir)/compress.at.in > $@-t && chmod a-w $@-t && mv $@-t $@ +- +-CLEANFILES += compress-gzip.at +-compress-gzip.at: compress.at.in +- $(AM_V_GEN)rm -rf $@ $@-t +- $(AM_V_at)sed 's/@tool@/gzip/g;s/@suff@/gz/g;s/@suff2@/tgz/g;' \ +- $(srcdir)/compress.at.in > $@-t && chmod a-w $@-t && mv $@-t $@ +- +-CLEANFILES += compress-xz.at +-compress-xz.at: compress.at.in +- $(AM_V_GEN)rm -rf $@ $@-t +- $(AM_V_at)sed 's/@tool@/xz/g;s/@suff@/xz/g;s/@suff2@/txz/g;' \ +- $(srcdir)/compress.at.in > $@-t && chmod a-w $@-t && mv $@-t $@ +- +-CLEANFILES += compress-bzip2.at +-compress-bzip2.at: compress.at.in +- $(AM_V_GEN)rm -rf $@ $@-t +- $(AM_V_at)sed 's/@tool@/bzip2/g;s/@suff@/bz2/g;s/@suff2@/tbz2/g;' \ +- $(srcdir)/compress.at.in > $@-t && chmod a-w $@-t && mv $@-t $@ +- +-CLEANFILES += compress-lzip.at +-compress-lzip.at: compress.at.in +- $(AM_V_GEN)rm -rf $@ $@-t +- $(AM_V_at)sed 's/@tool@/lzip/g;s/@suff@/lz/g;s/@suff2@//g;' \ +- $(srcdir)/compress.at.in > $@-t && chmod a-w $@-t && mv $@-t $@ +- +-CLEANFILES += compress-lzop.at +-compress-lzop.at: compress.at.in +- $(AM_V_GEN)rm -rf $@ $@-t +- $(AM_V_at)sed 's/@tool@/lzop/g;s/@suff@/lzo/g;s/@suff2@//g;' \ +- $(srcdir)/compress.at.in > $@-t && chmod a-w $@-t && mv $@-t $@ +- + distclean-local: + -rm -rf download + +diff --git a/tests/compress.at.in b/tests/compress.at.in +deleted file mode 100644 +index 91a6af2..0000000 +--- a/tests/compress.at.in ++++ /dev/null +@@ -1,67 +0,0 @@ +-# Process this file with autom4te to create testsuite. -*- Autotest -*- +- +-# Test suite for GNU tar. +-# Copyright 2018-2019 Free Software Foundation, Inc. +- +-# This file is part of GNU tar. +- +-# GNU tar 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. +- +-# GNU tar 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 . +- +-# tar can create/decompress @tool@-compressed tarballs +- +-AT_SETUP([compress: @tool@]) +-AT_KEYWORDS([compression @tool@]) +- +-unset TAR_OPTIONS +- +-AT_CHECK([ +-AT_GZIP_PREREQ([@tool@]) +- +-touch empty +-# Create with --@tool@: +-tar --@tool@ -cf - empty 2>err > k.tar.@suff@ || exit 1 +-test -s err && exit 1 +-tar tf k.tar.@suff@ 2>err > out || exit 1 +-test "$(cat out)" = empty || exit 1 +-test -s err && exit 1 +- +-# Ensure -ac works with an -f-specified .@suff@-suffixed name. +-tar -acf k2.tar.@suff@ empty 2>err > out || exit 1 +-cmp k2.tar.@suff@ k.tar.@suff@ || exit 1 +-test -s err && exit 1 +- +-# Extraction: ensure the .@suff@ suffix is recognized. +-rm -f empty || exit 1 +-tar xf k.tar.@suff@ 2>err > out || exit 1 +-test -s err && exit 1 +-test -f empty || exit 1 +- +-if test -n '@suff2@'; then +- # Extraction: ensure the .@suff2@ suffix is also recognized. +- mv k.tar.@suff@ k.@suff2@ || exit 1 +- rm -f empty +- tar xf k.@suff2@ 2>err > out || exit 1 +- test -s err && exit 1 +- test -f empty || exit 1 +-else +- : +-fi +- +-], +-[0], +-[], +-[], +-[],[]) +- +-AT_CLEANUP +diff --git a/tests/compress.m4 b/tests/compress.m4 +new file mode 100644 +index 0000000..1f22632 +--- /dev/null ++++ b/tests/compress.m4 +@@ -0,0 +1,56 @@ ++# This file is part of GNU tar testsuite. -*- Autotest -*- ++# Copyright 2018-2019 Free Software Foundation, Inc. ++# ++# GNU tar 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. ++# ++# GNU tar 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 . ++ ++dnl TAR_CHECK_COMPRESS(TOOL, SUF[, SUF2]) ++dnl Tests whether tar can create archives using TOOL (i.e. using the --TOOL ++dnl command line option). SUF and optional SUF2 are suffixes for created ++dnl archives (without leading dot). Tar should be able to use TOOL to ++dnl automatically decompress archives with names ending on these suffixes. ++m4_define([TAR_CHECK_COMPRESS], ++[AT_SETUP([compress: $1]) ++AT_KEYWORDS([compression compress-$1 $1]) ++ ++AT_CHECK([ ++AT_GZIP_PREREQ($1) ++unset TAR_OPTIONS ++ ++touch empty ++set -e ++: create with --$1 ++tar --$1 -cf k.tar.$2 empty ++tar tf k.tar.$2 ++ ++m4_foreach([SUF], m4_quote(m4_shift($@)), ++[ ++echo testing .SUF ++tar -acf k2.tar.SUF empty ++cat k2.tar.SUF | $1 -d > k.SUF.tar ++tar tf k.SUF.tar ++]) ++ ++# Extraction: ensure compressed format is correctly recognized ++rm -f empty ++tar xf k.tar.$2 ++test -f empty ++], ++[0], ++[empty ++m4_foreach([SUF],m4_quote(m4_shift($@)),[testing .SUF ++empty ++])]) ++ ++AT_CLEANUP ++]) +diff --git a/tests/testsuite.at b/tests/testsuite.at +index f751bcf..ce25c96 100644 +--- a/tests/testsuite.at ++++ b/tests/testsuite.at +@@ -217,13 +217,14 @@ m4_include([opcomp05.at]) + m4_include([opcomp06.at]) + + AT_BANNER([Compression]) +-m4_include([compress-gzip.at]) +-m4_include([compress-bzip2.at]) +-m4_include([compress-xz.at]) ++m4_include([compress.m4]) ++TAR_CHECK_COMPRESS(gzip, gz, tgz) ++TAR_CHECK_COMPRESS(bzip2, bz2, tbz2) ++TAR_CHECK_COMPRESS(xz, xz, txz) + dnl: omit lzma, because it would fail due to magic number mismatch +-m4_include([compress-lzip.at]) +-m4_include([compress-lzop.at]) +-m4_include([compress-zstd.at]) ++TAR_CHECK_COMPRESS(lzip, lz) ++TAR_CHECK_COMPRESS(lzop, lzo) ++TAR_CHECK_COMPRESS(zstd, zst, tzst) + + AT_BANNER([Positional options]) + m4_include([positional01.at]) +-- +2.20.1 + diff --git a/tar.spec b/tar.spec index 2db0d17..4f7c376 100644 --- a/tar.spec +++ b/tar.spec @@ -5,7 +5,7 @@ Summary: A GNU file archiving program Name: tar Epoch: 2 Version: 1.31 -Release: 3%{?dist} +Release: 4%{?dist} License: GPLv3+ URL: http://www.gnu.org/software/tar/ @@ -19,6 +19,7 @@ Patch3: tar-1.29-wildcards.patch Patch4: tar-1.28-atime-rofs.patch Patch9: tar-1.28-document-exclude-mistakes.patch Patch10: tar-1.31-dirrem-tests.patch +Patch11: tar-1.31-racy-compress-tests.patch BuildRequires: gcc BuildRequires: autoconf automake texinfo gettext libacl-devel @@ -112,6 +113,9 @@ make check || ( %changelog +* Mon Feb 04 2019 Pavel Raiskup - 1.31-4 +- fix racy compress: gzip test + * Sun Feb 03 2019 Fedora Release Engineering - 2:1.31-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild