commit a3f1d933cc5e61037100f5e60eac45764b8b4b50 Author: Sergey Poznyakoff Date: Thu Mar 11 12:19:32 2010 +0200 Bugfix. * src/names.c (collect_and_sort_names): Initialize prev_name. Reported by Dmitry V. Levin. diff --git a/src/names.c b/src/names.c index 1146020..ea2ce76 100644 --- a/src/names.c +++ b/src/names.c @@ -871,7 +871,7 @@ void collect_and_sort_names (void) { struct name *name; - struct name *next_name, *prev_name; + struct name *next_name, *prev_name = NULL; int num_names; struct stat statbuf; Hash_table *nametab; commit 67b4f3519d838c6f16f5b6b63c0b9b8669fb3dd9 Author: Sergey Poznyakoff Date: Fri Mar 12 09:48:46 2010 +0200 Bugfixes. * src/buffer.c (check_label_pattern): Initialize result. * tests/remfiles01.at: Skip if run with root privileges. diff --git a/src/buffer.c b/src/buffer.c index 8e1bb9b..dfc8456 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1374,7 +1374,7 @@ static bool check_label_pattern (const char *label) { char *string; - bool result; + bool result = false; if (fnmatch (volume_label_option, label, 0) == 0) return true; diff --git a/tests/remfiles01.at b/tests/remfiles01.at index 940fd95..73752b4 100644 --- a/tests/remfiles01.at +++ b/tests/remfiles01.at @@ -30,6 +30,7 @@ AT_KEYWORDS([create remove-files remfiles01 gzip]) unset TAR_OPTIONS AT_CHECK([ +AT_UNPRIVILEGED_PREREQ AT_GZIP_PREREQ AT_SORT_PREREQ commit 340dbf5aabfee4e1e657f8ebf202a2fee1750a63 Author: Sergey Poznyakoff Date: Sat Mar 20 13:14:31 2010 +0200 Fix undesired error exit on receiving SIGPIPE. * src/tar.c: Do not ignore SIGPIPE. * tests/sigpipe.at: New testcase. * tests/Makefile.am, tests/testsuite.at: Add sigpipe.at * tests/remfiles01.at: Fix error code expectation. * NEWS: Update. diff --git a/src/tar.c b/src/tar.c index e3fdf7b..b127963 100644 --- a/src/tar.c +++ b/src/tar.c @@ -2570,8 +2570,6 @@ main (int argc, char **argv) obstack_init (&argv_stk); - /* Ensure default behavior for some signals */ - signal (SIGPIPE, SIG_IGN); /* System V fork+wait does not work if SIGCHLD is ignored. */ signal (SIGCHLD, SIG_DFL); diff --git a/tests/Makefile.am b/tests/Makefile.am index 8f16244..31811b0 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -127,6 +127,7 @@ TESTSUITE_AT = \ shortfile.at\ shortupd.at\ shortrec.at\ + sigpipe.at\ sparse01.at\ sparse02.at\ sparse03.at\ diff --git a/tests/remfiles01.at b/tests/remfiles01.at index 73752b4..86b5c03 100644 --- a/tests/remfiles01.at +++ b/tests/remfiles01.at @@ -52,7 +52,9 @@ EC=$? sed -n '/(child)/p' err >&2 rm err find . | sort -exit $EC +# Gzip exit code is propagated to the shell. Usually it is +# 141. We convert all non-zero exits to 2 to make it predictable. +test $EC && exit 2 ], [2], [. diff --git a/tests/sigpipe.at b/tests/sigpipe.at new file mode 100644 index 0000000..9edca77 --- /dev/null +++ b/tests/sigpipe.at @@ -0,0 +1,39 @@ +# Process this file with autom4te to create testsuite. -*- Autotest -*- + +# Test suite for GNU tar. +# 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, 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 . + +AT_SETUP([sigpipe handling]) +AT_KEYWORDS([sigpipe]) + +# Description: Tar 1.23 ignored sigpipe which lead to spurious "write +# error" diagnostics when piping output to another programs. +# Reported-by: "Dmitry V. Levin" +# References: http://lists.gnu.org/archive/html/bug-tar/2010-03/msg00039.html +# <20100319184141.GC30047@wo.int.altlinux.org> + +AT_CHECK([ +genfile --length 2048 --file first +genfile --length 2048 --file second +genfile --length 2049 --file third + +tar cf archive first second third + +tar tf archive | : +], +[0]) + +AT_CLEANUP diff --git a/tests/testsuite.at b/tests/testsuite.at index 3e75ed8..9205d52 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -231,6 +231,8 @@ m4_include([remfiles01.at]) m4_include([remfiles02.at]) m4_include([remfiles03.at]) +m4_include([sigpipe.at]) + m4_include([star/gtarfail.at]) m4_include([star/gtarfail2.at]) commit 40dea1ae7fc892a54eae2efd30ddd8559c697525 Author: Sergey Poznyakoff Date: Sat Mar 27 22:24:19 2010 +0200 Fix coredump. * src/names.c (collect_and_sort_names): Remove entry from the table before freeing it. diff --git a/src/names.c b/src/names.c index 2beaf3e..a3c6f58 100644 --- a/src/names.c +++ b/src/names.c @@ -986,6 +986,7 @@ collect_and_sort_names (void) { if (p->child) rebase_child_list (p->child, name); + hash_delete (nametab, name); /* FIXME: remove_directory (p->caname); ? */ remname (p); free_name (p);