From: Paul Eggert Date: Tue, 26 Oct 2010 03:20:19 +0000 (-0700) Subject: upstream: fix bug with -C and extracting directories X-Git-Url: https://git.cworth.org/git?p=tar;a=commitdiff_plain;h=40c40231f79e4325a3e07a59c8280fa46341fc88 upstream: fix bug with -C and extracting directories Cherry-picked from upstream commit acb77ac5bd4bf9248070c9c512525eee8258aebd: Problem reported by Denis Excoffier in . * src/extract.c (extract_dir): Use mkdirat, not mkdir. * tests/extrac16.at: New file, to test for this bug. * tests/Makefile.am (TESTSUITE_AT): Add it. * tests/testsuite.at: Include it. This file is a placeholder. It will be replaced with the actual ChangeLog by make dist. Run make ChangeLog if you wish to create it earlier. --- diff --git a/debian/changelog b/debian/changelog index 5e57a88..c6250bd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +tar (1.24-2) unstable; urgency=low + + * upstream patch to fix extraction of of empty directories with -C, + closes: #602209. + + -- Carl Worth Sat, 06 Nov 2010 12:51:16 -0700 + tar (1.24-1) unstable; urgency=low * new upstream version diff --git a/src/extract.c b/src/extract.c index 0d23d4a..98236ac 100644 --- a/src/extract.c +++ b/src/extract.c @@ -777,7 +777,7 @@ extract_dir (char *file_name, int typeflag) for (;;) { - status = mkdir (file_name, mode); + status = mkdirat (chdir_fd, file_name, mode); if (status == 0) { current_mode = mode & ~ current_umask; diff --git a/tests/Makefile.am b/tests/Makefile.am index d29563a..b71e83c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -82,6 +82,7 @@ TESTSUITE_AT = \ extrac13.at\ extrac14.at\ extrac15.at\ + extrac16.at\ filerem01.at\ filerem02.at\ gzip.at\ diff --git a/tests/extrac16.at b/tests/extrac16.at new file mode 100644 index 0000000..625e579 --- /dev/null +++ b/tests/extrac16.at @@ -0,0 +1,36 @@ +# 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 . + +# written by Paul Eggert from a bug report by Denis Excoffier +# + +# Check extraction of empty directory with -C. + +AT_SETUP([extract empty directory with -C]) +AT_KEYWORDS([extract extrac16]) + +AT_TAR_CHECK([ +mkdir src src/a src/a/b dest +touch src/a/c + +tar -cf archive.tar -C src a && +tar -xf archive.tar -C dest +], +[0],[],[],[],[],[gnu]) + +AT_CLEANUP diff --git a/tests/testsuite.at b/tests/testsuite.at index c386892..40f0e41 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -154,6 +154,7 @@ m4_include([extrac12.at]) m4_include([extrac13.at]) m4_include([extrac14.at]) m4_include([extrac15.at]) +m4_include([extrac16.at]) m4_include([label01.at]) m4_include([label02.at])