Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
2d07b855
Commit
2d07b855
authored
Feb 15, 2015
by
Antoine Pitrou
Browse files
Options
Browse Files
Download
Plain Diff
Issue #23146: Fix mishandling of absolute Windows paths with forward slashes in pathlib.
Detected and fixed by Serhiy.
parents
90caf017
57fffd6f
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
27 additions
and
16 deletions
+27
-16
Lib/pathlib.py
Lib/pathlib.py
+4
-0
Lib/test/test_pathlib.py
Lib/test/test_pathlib.py
+20
-16
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/pathlib.py
View file @
2d07b855
...
...
@@ -73,6 +73,10 @@ class _Flavour(object):
# parts. This makes the result of parsing e.g.
# ("C:", "/", "a") reasonably intuitive.
for
part
in
it
:
if
not
part
:
continue
if
altsep
:
part
=
part
.
replace
(
altsep
,
sep
)
drv
=
self
.
splitroot
(
part
)[
0
]
if
drv
:
break
...
...
Lib/test/test_pathlib.py
View file @
2d07b855
...
...
@@ -102,31 +102,35 @@ class NTFlavourTest(_BaseFlavourTest, unittest.TestCase):
check
=
self
.
_check_parse_parts
# First part is anchored
check
([
'c:'
],
(
'c:'
,
''
,
[
'c:'
]))
check
([
'c:
\
\
'
],
(
'c:'
,
'
\
\
'
,
[
'c:
\
\
'
]))
check
([
'
\
\
'
],
(
''
,
'
\
\
'
,
[
'
\
\
'
]))
check
([
'c:
/'
],
(
'c:'
,
'
\
\
'
,
[
'c:
\
\
'
]))
check
([
'
/'
],
(
''
,
'
\
\
'
,
[
'
\
\
'
]))
check
([
'c:a'
],
(
'c:'
,
''
,
[
'c:'
,
'a'
]))
check
([
'c:
\
\
a'
],
(
'c:'
,
'
\
\
'
,
[
'c:
\
\
'
,
'a'
]))
check
([
'
\
\
a'
],
(
''
,
'
\
\
'
,
[
'
\
\
'
,
'a'
]))
check
([
'c:
/a'
],
(
'c:'
,
'
\
\
'
,
[
'c:
\
\
'
,
'a'
]))
check
([
'
/a'
],
(
''
,
'
\
\
'
,
[
'
\
\
'
,
'a'
]))
# UNC paths
check
([
'
\
\
\
\
a
\
\
b'
],
(
'
\
\
\
\
a
\
\
b'
,
'
\
\
'
,
[
'
\
\
\
\
a
\
\
b
\
\
'
]))
check
([
'
\
\
\
\
a
\
\
b
\
\
'
],
(
'
\
\
\
\
a
\
\
b'
,
'
\
\
'
,
[
'
\
\
\
\
a
\
\
b
\
\
'
]))
check
([
'
\
\
\
\
a
\
\
b
\
\
c'
],
(
'
\
\
\
\
a
\
\
b'
,
'
\
\
'
,
[
'
\
\
\
\
a
\
\
b
\
\
'
,
'c'
]))
check
([
'
//a/b'
],
(
'
\
\
\
\
a
\
\
b'
,
'
\
\
'
,
[
'
\
\
\
\
a
\
\
b
\
\
'
]))
check
([
'
//a/b/'
],
(
'
\
\
\
\
a
\
\
b'
,
'
\
\
'
,
[
'
\
\
\
\
a
\
\
b
\
\
'
]))
check
([
'
//a/b/c'
],
(
'
\
\
\
\
a
\
\
b'
,
'
\
\
'
,
[
'
\
\
\
\
a
\
\
b
\
\
'
,
'c'
]))
# Second part is anchored, so that the first part is ignored
check
([
'a'
,
'Z:b'
,
'c'
],
(
'Z:'
,
''
,
[
'Z:'
,
'b'
,
'c'
]))
check
([
'a'
,
'Z:
\
\
b'
,
'c'
],
(
'Z:'
,
'
\
\
'
,
[
'Z:
\
\
'
,
'b'
,
'c'
]))
check
([
'a'
,
'
\
\
b'
,
'c'
],
(
''
,
'
\
\
'
,
[
'
\
\
'
,
'b'
,
'c'
]))
check
([
'a'
,
'Z:/b'
,
'c'
],
(
'Z:'
,
'
\
\
'
,
[
'Z:
\
\
'
,
'b'
,
'c'
]))
# UNC paths
check
([
'a'
,
'
\
\
\
\
b
\
\
c'
,
'd'
],
(
'
\
\
\
\
b
\
\
c'
,
'
\
\
'
,
[
'
\
\
\
\
b
\
\
c
\
\
'
,
'd'
]))
check
([
'a'
,
'
//b/c'
,
'd'
],
(
'
\
\
\
\
b
\
\
c'
,
'
\
\
'
,
[
'
\
\
\
\
b
\
\
c
\
\
'
,
'd'
]))
# Collapsing and stripping excess slashes
check
([
'a'
,
'Z:
\
\
\
\
b
\
\
\
\
c
\
\
'
,
'd
\
\
'
],
(
'Z:'
,
'
\
\
'
,
[
'Z:
\
\
'
,
'b'
,
'c'
,
'd'
]))
check
([
'a'
,
'Z:
//b//c/'
,
'd/
'
],
(
'Z:'
,
'
\
\
'
,
[
'Z:
\
\
'
,
'b'
,
'c'
,
'd'
]))
# UNC paths
check
([
'a'
,
'
\
\
\
\
b
\
\
c
\
\
\
\
'
,
'd'
],
(
'
\
\
\
\
b
\
\
c'
,
'
\
\
'
,
[
'
\
\
\
\
b
\
\
c
\
\
'
,
'd'
]))
check
([
'a'
,
'
//b/c//'
,
'd'
],
(
'
\
\
\
\
b
\
\
c'
,
'
\
\
'
,
[
'
\
\
\
\
b
\
\
c
\
\
'
,
'd'
]))
# Extended paths
check
([
'
\
\
\
\
?
\
\
c:
\
\
'
],
(
'
\
\
\
\
?
\
\
c:'
,
'
\
\
'
,
[
'
\
\
\
\
?
\
\
c:
\
\
'
]))
check
([
'
\
\
\
\
?
\
\
c:
\
\
a'
],
(
'
\
\
\
\
?
\
\
c:'
,
'
\
\
'
,
[
'
\
\
\
\
?
\
\
c:
\
\
'
,
'a'
]))
check
([
'//?/c:/'
],
(
'
\
\
\
\
?
\
\
c:'
,
'
\
\
'
,
[
'
\
\
\
\
?
\
\
c:
\
\
'
]))
check
([
'//?/c:/a'
],
(
'
\
\
\
\
?
\
\
c:'
,
'
\
\
'
,
[
'
\
\
\
\
?
\
\
c:
\
\
'
,
'a'
]))
check
([
'//?/c:/a'
,
'/b'
],
(
'
\
\
\
\
?
\
\
c:'
,
'
\
\
'
,
[
'
\
\
\
\
?
\
\
c:
\
\
'
,
'b'
]))
# Extended UNC paths (format is "\\?\UNC\server\share")
check
([
'
\
\
\
\
?
\
\
UNC
\
\
b
\
\
c'
],
(
'
\
\
\
\
?
\
\
UNC
\
\
b
\
\
c'
,
'
\
\
'
,
[
'
\
\
\
\
?
\
\
UNC
\
\
b
\
\
c
\
\
'
]))
check
([
'
\
\
\
\
?
\
\
UNC
\
\
b
\
\
c
\
\
d'
],
(
'
\
\
\
\
?
\
\
UNC
\
\
b
\
\
c'
,
'
\
\
'
,
[
'
\
\
\
\
?
\
\
UNC
\
\
b
\
\
c
\
\
'
,
'd'
]))
check
([
'//?/UNC/b/c'
],
(
'
\
\
\
\
?
\
\
UNC
\
\
b
\
\
c'
,
'
\
\
'
,
[
'
\
\
\
\
?
\
\
UNC
\
\
b
\
\
c
\
\
'
]))
check
([
'//?/UNC/b/c/d'
],
(
'
\
\
\
\
?
\
\
UNC
\
\
b
\
\
c'
,
'
\
\
'
,
[
'
\
\
\
\
?
\
\
UNC
\
\
b
\
\
c
\
\
'
,
'd'
]))
# Second part has a root but not drive
check
([
'a'
,
'/b'
,
'c'
],
(
''
,
'
\
\
'
,
[
'
\
\
'
,
'b'
,
'c'
]))
check
([
'Z:/a'
,
'/b'
,
'c'
],
(
'Z:'
,
'
\
\
'
,
[
'Z:
\
\
'
,
'b'
,
'c'
]))
check
([
'//?/Z:/a'
,
'/b'
,
'c'
],
(
'
\
\
\
\
?
\
\
Z:'
,
'
\
\
'
,
[
'
\
\
\
\
?
\
\
Z:
\
\
'
,
'b'
,
'c'
]))
def
test_splitroot
(
self
):
f
=
self
.
flavour
.
splitroot
...
...
Misc/NEWS
View file @
2d07b855
...
...
@@ -13,6 +13,9 @@ Core and Builtins
Library
-------
- Issue #23146: Fix mishandling of absolute Windows paths with forward
slashes in pathlib.
- Issue #23096: Pickle representation of floats with protocol 0 now is the same
for both Python and C implementations.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment