[issue13702] relative symlinks in tarfile.extract broken (windows)

Eryk Sun report at bugs.python.org
Sat May 30 13:07:34 EDT 2020


Eryk Sun <eryksun at gmail.com> added the comment:

This is still a problem with WinAPI CreateSymbolicLinkW. It fails to replace slashes with backslashes in the substitute path if it's a relative path, which creates a broken link. As a workaround, os.symlink should replace slashes with backslashes in relative target paths. Except drive-relative targets such as "C:spam" can be ignored, since CreateSymbolicLinkW is forced to normalize them as fully-qualified paths.

Non-UNC rooted paths such as "/Program Files/Python38" are also relative paths. (ntpath.isabs incorrectly classifies them as absolute.) A relative target path gets resolved against the parsed, opened path of the symlink. For example, consider a symlink on a volume at r"Eggs\spam.txt" that targets r"\spam.txt". If the volume is mounted at "W:\\", then accessing r"W:\Eggs\spam.txt" resolves to r"W:\spam.txt". But if the volume is mounted at r"C:\Mount\Work", then accessing r"C:\Mount\Work\Eggs\spam.txt" resolves to r"C:\spam.txt".

----------
components: +Library (Lib)
nosy: +paul.moore, steve.dower, zach.ware
stage: test needed -> needs patch
versions: +Python 3.10, Python 3.8, Python 3.9 -Python 3.2, Python 3.3

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue13702>
_______________________________________


More information about the Python-bugs-list mailing list