Repository navigation
os.path.normpath over-normalizes #46542
Description
Activity
I found a bug (or at least a shortcoming) in Python's os.path.normpath routine.
It overly normalizes, at least for Unix and Unix-like systems (including Mac), and
Windows.Example:
x = os.path.join(".", "dog", "..", "cupcake.txt") print x x = os.path.normpath(x) print x
If say "dog" is a symlink (any flavor of Unix (including OS X), or Win), there is a
difference between ./dog/../cupcake.txt and ./cupcake.txt.In the OS, if dog is a symlink to fire/fly, the .. resolves relative to fire/fly.
It should be safe to normalize this:
././././././././cupcake.txt --> ./cupcake.txtIt should be safe to normalize this:
.////////////////cupcake.txt --> ./cupcake.txtBut this is not safe to normalize:
./x/../x/../x/../cupcake.txt --> ./cupcake.txtFor example, if the directories look like this:
./cupcake.txt
./over/yonder/back/cupcake.txt
./x --> over/there
./over/there
./over/x --> yonder/aways
./over/yonder/aways
./over/yonder/x --> back/again
./over/yonder/back/again./cupcake.txt refers to first cupcake.
./x/../x/../x/../cupcake.txt refers to the second cupcake.The os.path.realpath does the resolve, but sometimes the path-in-hand is for some
arbitrary path, and not necessarily one on the local system, or if on the local
files system may be relative based off from a different cwd.- addedtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
on Mar 14, 2008 This is a documented feature:
"""
normpath(path)Normalize a pathname. ... It should be understood that this may change
the meaning of the path if it contains symbolic links!
"""- addedtype-featureA feature request or enhancementA feature request or enhancementand removedtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
on Mar 16, 2008 Closing as "Won't fix".
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields: