Skip to content

Commit 2720dbd

Browse files
committed
gh-92455: Respect case-sensitive mimetype suffixes
1 parent a8c9aa9 commit 2720dbd

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

Lib/mimetypes.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,15 +187,19 @@ def _guess_file_type(self, path, strict, splitext):
187187
base, ext = splitext(base)
188188
else:
189189
encoding = None
190-
ext = ext.lower()
190+
ext_lower = ext.lower()
191191
types_map = self.types_map[True]
192192
if ext in types_map:
193193
return types_map[ext], encoding
194+
if ext_lower in types_map:
195+
return types_map[ext_lower], encoding
194196
elif strict:
195197
return None, encoding
196198
types_map = self.types_map[False]
197199
if ext in types_map:
198200
return types_map[ext], encoding
201+
if ext_lower in types_map:
202+
return types_map[ext_lower], encoding
199203
else:
200204
return None, encoding
201205

Lib/test/test_mimetypes.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,18 @@ def test_case_sensitivity(self):
4949
eq(self.db.guess_file_type("foobar.tar.z"), (None, None))
5050
eq(self.db.guess_type("scheme:foobar.tar.z"), (None, None))
5151

52+
def test_added_types_case_sensitive_preferred(self):
53+
self.db.add_type("text/x-r-script", ".R")
54+
self.db.add_type("text/x-test-lowercase-r", ".r")
55+
self.assertEqual(
56+
self.db.guess_file_type("example.R"),
57+
("text/x-r-script", None),
58+
)
59+
self.assertEqual(
60+
self.db.guess_file_type("example.r"),
61+
("text/x-test-lowercase-r", None),
62+
)
63+
5264
def test_default_data(self):
5365
eq = self.assertEqual
5466
eq(self.db.guess_file_type("foo.html"), ("text/html", None))

0 commit comments

Comments
 (0)