1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- # Process this file with autom4te to create testsuite. -*- Autotest -*-
- # Test suite for GNU tar.
- # Copyright 2013-2014, 2016 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 <http://www.gnu.org/licenses/>.
- # Description: In tar 1.26 listed-incremental with -C and absolute path
- # would malfunction under certain conditions due to buggy filename
- # normalization.
- #
- # The value returned by normalize_filename() is used to populate the "caname"
- # field in both the "directory" structure in incremen.c and the "name"
- # structure in names.c, and in both cases that field is then used in the
- # "hash" and "compare" functions for the related hash tables. Thus, the
- # fact that the returned value doesn't reflect the operation of previous
- # "-C" options means that it's possible for two different directories to
- # be given the same "caname" value in the hashed structure and thus end up
- # being confused with each other.
- #
- # The bug is triggered when dumping both relative paths after -C and
- # absolute paths that match the process' current working directory.
- #
- # Reported by: Nathan Stratton Treadway <[email protected]>
- # References: <[email protected]>,
- # http://lists.gnu.org/archive/html/bug-tar/2013-09/msg00034.html
- AT_SETUP([filename normalization])
- AT_KEYWORDS([incremental create incr08])
- AT_TAR_CHECK([
- AT_SORT_PREREQ
- mkdir tartest
- cd tartest
- mkdir foo
- mkdir foo/subdir
- mkdir foo/subdir/dir1
- mkdir subdir
- mkdir subdir/dir2
- decho A
- find .|sort
- decho B
- DIR=`pwd`
- tar -cvf ../foo.tar --listed-incremental=../foo.snar -C foo . $DIR 2>../err |\
- sed "s|$DIR|ABSPATH|"
- sed "s|$DIR|ABSPATH|" ../err >&2
- ],
- [0],
- [A
- .
- ./foo
- ./foo/subdir
- ./foo/subdir/dir1
- ./subdir
- ./subdir/dir2
- B
- ./
- ./subdir/
- ./subdir/dir1/
- ABSPATH/
- ABSPATH/subdir/
- ABSPATH/subdir/dir2/
- ],
- [A
- B
- tar: .: Directory is new
- tar: ./subdir: Directory is new
- tar: ./subdir/dir1: Directory is new
- tar: ABSPATH: Directory is new
- tar: ABSPATH/subdir: Directory is new
- tar: ABSPATH/subdir/dir2: Directory is new
- tar: Removing leading `/' from member names
- ],[],[],[gnu])
- AT_CLEANUP
|