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
cdca3fc7
Commit
cdca3fc7
authored
Jul 17, 2012
by
Hynek Schlawack
Browse files
Options
Browse Files
Download
Plain Diff
#15377: Make posixpath.join() more strict when checking for str/bytes mix
Based on a patch by Nick Coghlan.
parents
bffad55c
6de1616c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
19 additions
and
14 deletions
+19
-14
Lib/posixpath.py
Lib/posixpath.py
+5
-4
Lib/test/test_posixpath.py
Lib/test/test_posixpath.py
+14
-10
No files found.
Lib/posixpath.py
View file @
cdca3fc7
...
...
@@ -83,12 +83,13 @@ def join(a, *p):
else
:
path
+=
sep
+
b
except
TypeError
:
strs
=
[
isinstance
(
s
,
str
)
for
s
in
(
a
,
)
+
p
]
if
any
(
strs
)
and
not
all
(
strs
):
valid_types
=
all
(
isinstance
(
s
,
(
str
,
bytes
,
bytearray
))
for
s
in
(
a
,
)
+
p
)
if
valid_types
:
# Must have a mixture of text and binary data
raise
TypeError
(
"Can't mix strings and bytes in path "
"components."
)
from
None
else
:
raise
raise
return
path
...
...
Lib/test/test_posixpath.py
View file @
cdca3fc7
import
itertools
import
os
import
posixpath
import
sys
...
...
@@ -56,18 +57,21 @@ class PosixPathTest(unittest.TestCase):
self
.
assertEqual
(
posixpath
.
join
(
b"/foo/"
,
b"bar/"
,
b"baz/"
),
b"/foo/bar/baz/"
)
# Check for friendly str/bytes mixing message
for
args
in
[[
b'bytes'
,
'str'
],
[
bytearray
(
b'bytes'
),
'str'
]]:
for
_
in
range
(
2
):
def
check_error_msg
(
list_of_args
,
msg
):
"""Check posixpath.join raises friendly TypeErrors."""
for
args
in
(
item
for
perm
in
list_of_args
for
item
in
itertools
.
permutations
(
perm
)
):
with
self
.
assertRaises
(
TypeError
)
as
cm
:
posixpath
.
join
(
*
args
)
self
.
assertEqual
(
"Can't mix strings and bytes in path components."
,
cm
.
exception
.
args
[
0
]
)
args
.
reverse
()
# check both orders
self
.
assertEqual
(
msg
,
cm
.
exception
.
args
[
0
])
check_error_msg
([[
b'bytes'
,
'str'
],
[
bytearray
(
b'bytes'
),
'str'
]],
"Can't mix strings and bytes in path components."
)
# regression, see #15377
with
self
.
assertRaises
(
TypeError
)
as
cm
:
os
.
path
.
join
(
None
,
'str'
)
self
.
assertNotEqual
(
"Can't mix strings and bytes in path components."
,
cm
.
exception
.
args
[
0
])
def
test_split
(
self
):
self
.
assertEqual
(
posixpath
.
split
(
"/foo/bar"
),
(
"/foo"
,
"bar"
))
...
...
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