bpo-41048: mimetypes should read the rule file using UTF-8, not the locale encoding (GH-20998)
This commit is contained in:
parent
e4f1fe6edb
commit
7f569c9bc0
|
@ -372,7 +372,7 @@ def init(files=None):
|
||||||
|
|
||||||
def read_mime_types(file):
|
def read_mime_types(file):
|
||||||
try:
|
try:
|
||||||
f = open(file)
|
f = open(file, encoding='utf-8')
|
||||||
except OSError:
|
except OSError:
|
||||||
return None
|
return None
|
||||||
with f:
|
with f:
|
||||||
|
|
|
@ -67,6 +67,18 @@ class MimeTypesTestCase(unittest.TestCase):
|
||||||
mime_dict = mimetypes.read_mime_types(file)
|
mime_dict = mimetypes.read_mime_types(file)
|
||||||
eq(mime_dict[".pyunit"], "x-application/x-unittest")
|
eq(mime_dict[".pyunit"], "x-application/x-unittest")
|
||||||
|
|
||||||
|
# bpo-41048: read_mime_types should read the rule file with 'utf-8' encoding.
|
||||||
|
# Not with locale encoding. _bootlocale has been imported because io.open(...)
|
||||||
|
# uses it.
|
||||||
|
with support.temp_dir() as directory:
|
||||||
|
data = "application/no-mans-land Fran\u00E7ais"
|
||||||
|
file = pathlib.Path(directory, "sample.mimetype")
|
||||||
|
file.write_text(data, encoding='utf-8')
|
||||||
|
import _bootlocale
|
||||||
|
with support.swap_attr(_bootlocale, 'getpreferredencoding', lambda do_setlocale=True: 'ASCII'):
|
||||||
|
mime_dict = mimetypes.read_mime_types(file)
|
||||||
|
eq(mime_dict[".Français"], "application/no-mans-land")
|
||||||
|
|
||||||
def test_non_standard_types(self):
|
def test_non_standard_types(self):
|
||||||
eq = self.assertEqual
|
eq = self.assertEqual
|
||||||
# First try strict
|
# First try strict
|
||||||
|
|
|
@ -1706,6 +1706,7 @@ Mikhail Terekhov
|
||||||
Victor Terrón
|
Victor Terrón
|
||||||
Pablo Galindo
|
Pablo Galindo
|
||||||
Richard M. Tew
|
Richard M. Tew
|
||||||
|
Srinivas Reddy Thatiparthy
|
||||||
Tobias Thelen
|
Tobias Thelen
|
||||||
Christian Theune
|
Christian Theune
|
||||||
Févry Thibault
|
Févry Thibault
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
:func:`mimetypes.read_mime_types` function reads the rule file using UTF-8 encoding, not the locale encoding.
|
||||||
|
Patch by Srinivas Reddy Thatiparthy.
|
Loading…
Reference in New Issue