bpo-12800: tarfile: Restore fix from 011525ee9
(GH-21409)
Restore fix from011525ee92
. (cherry picked from commit4fedd7123e
) Co-authored-by: Julien Palard <julien@palard.fr>
This commit is contained in:
parent
543724b972
commit
9d2c2a8e3b
|
@ -2237,6 +2237,9 @@ class TarFile(object):
|
|||
try:
|
||||
# For systems that support symbolic and hard links.
|
||||
if tarinfo.issym():
|
||||
if os.path.lexists(targetpath):
|
||||
# Avoid FileExistsError on following os.symlink.
|
||||
os.unlink(targetpath)
|
||||
os.symlink(tarinfo.linkname, targetpath)
|
||||
else:
|
||||
# See extract().
|
||||
|
|
|
@ -1346,10 +1346,10 @@ class WriteTest(WriteTestBase, unittest.TestCase):
|
|||
f.write('something\n')
|
||||
os.symlink(source_file, target_file)
|
||||
with tarfile.open(temparchive, 'w') as tar:
|
||||
tar.add(source_file)
|
||||
tar.add(target_file)
|
||||
tar.add(source_file, arcname="source")
|
||||
tar.add(target_file, arcname="symlink")
|
||||
# Let's extract it to the location which contains the symlink
|
||||
with tarfile.open(temparchive) as tar:
|
||||
with tarfile.open(temparchive, errorlevel=2) as tar:
|
||||
# this should not raise OSError: [Errno 17] File exists
|
||||
try:
|
||||
tar.extractall(path=tempdir)
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
Extracting a symlink from a tarball should succeed and overwrite the symlink
|
||||
if it already exists. The fix is to remove the existing file or symlink
|
||||
before extraction. Based on patch by Chris AtLee, Jeffrey Kintscher, and
|
||||
Senthil Kumaran.
|
Loading…
Reference in New Issue