summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/extrac21.at59
-rw-r--r--tests/testsuite.at2
3 files changed, 62 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 88d183b0..2d7939d5 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -109,6 +109,7 @@ TESTSUITE_AT = \
extrac18.at\
extrac19.at\
extrac20.at\
+ extrac21.at\
filerem01.at\
filerem02.at\
dirrem01.at\
diff --git a/tests/extrac21.at b/tests/extrac21.at
new file mode 100644
index 00000000..671b1010
--- /dev/null
+++ b/tests/extrac21.at
@@ -0,0 +1,59 @@
+# Test suite for GNU tar. -*- Autotest -*-
+# Copyright 2017 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/>.
+
+# When called with the --delay-directory-restore option, tar would
+# in some cases restore the directory permissions too early, before
+# attempting to replace softlink placeholders with the actual link.
+# This caused failure if the permissions forbade writing.
+#
+# The bug was caused by incorrect assumption about delayed_set_stat
+# ordering in create_placeholder_file.
+#
+# Reported by: Giuseppe Scrivano <gscrivano@gnu.org>
+# References: <878tfa17ti.fsf@redhat.com>,
+# <http://lists.gnu.org/archive/html/bug-tar/2017-11/msg00009.html>
+
+AT_SETUP([delay-directory-restore])
+AT_KEYWORDS([extract extract21 read-only symlink delay-directory-restore])
+AT_TAR_CHECK([
+AT_UNPRIVILEGED_PREREQ
+
+mkdir a a/b a/c
+genfile --file a/b/D
+genfile --file a/c/A
+cd a/b
+ln -sf ../c/A
+cd ../..
+chmod a-w a/b
+tar --no-recurs -c -f A.tar a a/b a/b/D a/c a/b/A a/c/A
+mkdir out
+tar -C out -v -x -f A.tar --delay-directory-restore
+],
+[0],
+[a/
+a/b/
+a/b/D
+a/c/
+a/b/A
+a/c/A
+],
+[],[],[],[ustar]) # Testing one format is enough
+
+AT_CLEANUP
+
+
diff --git a/tests/testsuite.at b/tests/testsuite.at
index 1f2c4ce9..2a837576 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -308,6 +308,8 @@ m4_include([extrac17.at])
m4_include([extrac18.at])
m4_include([extrac19.at])
m4_include([extrac20.at])
+m4_include([extrac21.at])
+
m4_include([backup01.at])
AT_BANNER([Comparing])