Skip to content

Commit 56b1dfd

Browse files
committed
Validate the project name field in wheel filenames
1 parent fd9977b commit 56b1dfd

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

packaging/utils.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,11 @@ def parse_wheel_filename(filename):
9696
)
9797

9898
parts = filename.split("-", dashes - 2)
99-
name = canonicalize_name(parts[0])
99+
name_part = parts[0]
100+
# See PEP 427 for the rules on escaping the project name
101+
if "__" in name_part or re.match(r"^[\w\d._]*$", name_part, re.UNICODE) is None:
102+
raise InvalidWheelFilename("Invalid project name: {0}".format(filename))
103+
name = canonicalize_name(name_part)
100104
version = Version(parts[1])
101105
if dashes == 5:
102106
# Build number must start with a digit

tests/test_utils.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,13 @@ def test_canonicalize_version(version, expected):
7474
"1000",
7575
{Tag("py3", "none", "any")},
7676
),
77+
(
78+
"foo_bár-1.0-py3-none-any.whl",
79+
"foo-bár",
80+
Version("1.0"),
81+
None,
82+
{Tag("py3", "none", "any")},
83+
),
7784
],
7885
)
7986
def test_parse_wheel_filename(filename, name, version, build, tags):
@@ -84,6 +91,8 @@ def test_parse_wheel_filename(filename, name, version, build, tags):
8491
("filename"),
8592
[
8693
("foo-1.0.wheel"),
94+
("foo__bar-1.0-py3-none-any.whl"),
95+
("foo#bar-1.0-py3-none-any.whl"),
8796
("foo-1.0-abc-py3-none-any.whl"),
8897
("foo-1.0-200-py3-none-any-junk.whl"),
8998
],

0 commit comments

Comments
 (0)