diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2021-02-04 16:51:38 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2021-02-04 16:51:38 +0200 |
commit | ee2ec5ff190fb91841fe7989c1c0b57f0a1eadb2 (patch) | |
tree | 6edfae8fc5921bb179b11d2dc58808ece828076c | |
parent | d9d4435692150fa8ff68e1b1a473d187cc3fd777 (diff) | |
download | tar-ee2ec5ff190fb91841fe7989c1c0b57f0a1eadb2.tar.gz |
Fix savannah bug #60002
Bug was introduced by commit 34d15af1.
* src/extract.c (prepare_to_extract): When extracting over pipe,
process only regular files.
* tests/extrac24.at: New test case.
* tests/Makefile.am: Add new test case.
* tests/testsuite.at: Likewise.
-rw-r--r-- | po/.gitignore | 1 | ||||
-rw-r--r-- | src/extract.c | 7 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/extrac24.at | 41 | ||||
-rw-r--r-- | tests/testsuite.at | 1 |
5 files changed, 50 insertions, 1 deletions
diff --git a/po/.gitignore b/po/.gitignore index b434b10d..ba06fe32 100644 --- a/po/.gitignore +++ b/po/.gitignore @@ -1,3 +1,4 @@ +/Makefile.in.in /Makevars.template~ /Makefile.in.in~ *.gmo diff --git a/src/extract.c b/src/extract.c index d6d98cb9..4429a90b 100644 --- a/src/extract.c +++ b/src/extract.c @@ -1708,7 +1708,12 @@ prepare_to_extract (char const *file_name, int typeflag, tar_extractor_t *fun) extractor = extract_file; } - if (!EXTRACT_OVER_PIPE) + if (EXTRACT_OVER_PIPE) + { + if (extractor != extract_file) + return false; + } + else { switch (old_files_option) { diff --git a/tests/Makefile.am b/tests/Makefile.am index b76fac9b..2ee589c2 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -122,6 +122,7 @@ TESTSUITE_AT = \ extrac21.at\ extrac22.at\ extrac23.at\ + extrac24.at\ filerem01.at\ filerem02.at\ dirrem01.at\ diff --git a/tests/extrac24.at b/tests/extrac24.at new file mode 100644 index 00000000..80cea54c --- /dev/null +++ b/tests/extrac24.at @@ -0,0 +1,41 @@ +# Test suite for GNU tar. -*- autotest -*- +# Copyright 2021 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 <http://www.gnu.org/licenses/>. +AT_SETUP([--to-stdout]) +AT_KEYWORDS([extract extrac24 to-stdout]) + +# Description: When extracting over pipe, only regular files should be +# extracted. In tar 1.33 this was broken, so that members of other types +# (in particular, directories) were extracted as usual. This test ensures +# that this is no longer the case. +# +# References: https://bugs.archlinux.org/task/69373, +# https://savannah.gnu.org/bugs/?60002 + +AT_TAR_CHECK([ +mkdir dir/ +echo TEXT > dir/file +tar cf a.tar dir +rm -r dir +tar --extract --to-stdout --file a.tar +test -d dir +], +[1], +[TEXT +]) + +AT_CLEANUP diff --git a/tests/testsuite.at b/tests/testsuite.at index ef8519de..d93f394c 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -344,6 +344,7 @@ m4_include([extrac20.at]) m4_include([extrac21.at]) m4_include([extrac22.at]) m4_include([extrac23.at]) +m4_include([extrac24.at]) m4_include([backup01.at]) |