summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_tarfile.py
diff options
context:
space:
mode:
authorSenthil Kumaran <orsenthil@gmail.com>2011-04-28 07:53:59 (GMT)
committerSenthil Kumaran <orsenthil@gmail.com>2011-04-28 07:53:59 (GMT)
commit7274828b482ea95ded057f21b9dd2d11967a6a91 (patch)
tree73c5a1d5fe76f55ffd357e7eb345855cfa2e15ba /Lib/test/test_tarfile.py
parent60811c215fa3b16a4096461d1ef0f855497bb875 (diff)
parent8a410d319ac60347150379a92f7804bab28ac70f (diff)
downloadcpython-7274828b482ea95ded057f21b9dd2d11967a6a91.zip
cpython-7274828b482ea95ded057f21b9dd2d11967a6a91.tar.gz
cpython-7274828b482ea95ded057f21b9dd2d11967a6a91.tar.bz2
merge from 3.2
Diffstat (limited to 'Lib/test/test_tarfile.py')
-rw-r--r--Lib/test/test_tarfile.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
index a645bf2..590fc26 100644
--- a/Lib/test/test_tarfile.py
+++ b/Lib/test/test_tarfile.py
@@ -982,6 +982,34 @@ class WriteTest(WriteTestBase):
self.assertEqual(t.name, cmp_path or path.replace(os.sep, "/"))
+ def test_extractall_symlinks(self):
+ # Test if extractall works properly when tarfile contains symlinks
+ tempdir = os.path.join(TEMPDIR, "testsymlinks")
+ temparchive = os.path.join(TEMPDIR, "testsymlinks.tar")
+ os.mkdir(tempdir)
+ try:
+ source_file = os.path.join(tempdir,'source')
+ target_file = os.path.join(tempdir,'symlink')
+ with open(source_file,'w') as f:
+ f.write('something\n')
+ os.symlink(source_file, target_file)
+ tar = tarfile.open(temparchive,'w')
+ tar.add(source_file)
+ tar.add(target_file)
+ tar.close()
+ # Let's extract it to the location which contains the symlink
+ tar = tarfile.open(temparchive,'r')
+ # this should not raise OSError: [Errno 17] File exists
+ try:
+ tar.extractall(path=tempdir)
+ except OSError:
+ self.fail("extractall failed with symlinked files")
+ finally:
+ tar.close()
+ finally:
+ os.unlink(temparchive)
+ shutil.rmtree(tempdir)
+
def test_pathnames(self):
self._test_pathname("foo")
self._test_pathname(os.path.join("foo", ".", "bar"))