(Merge 3.3) Issue #17429: platform.linux_distribution() now decodes files from
the UTF-8 encoding with the surrogateescape error handler, instead of decoding from the locale encoding in strict mode. It fixes the function on Fedora 19 which is probably the first major distribution release with a non-ASCII name. Patch written by Toshio Kuratomi.
This commit is contained in:
commit
0aba1a2663
|
@ -129,6 +129,10 @@ except AttributeError:
|
|||
# Standard Unix uses /dev/null
|
||||
DEV_NULL = '/dev/null'
|
||||
|
||||
# Directory to search for configuration information on Unix.
|
||||
# Constant used by test_platform to test linux_distribution().
|
||||
_UNIXCONFDIR = '/etc'
|
||||
|
||||
### Platform specific APIs
|
||||
|
||||
_libc_search = re.compile(b'(__libc_init)'
|
||||
|
@ -315,7 +319,7 @@ def linux_distribution(distname='', version='', id='',
|
|||
|
||||
"""
|
||||
try:
|
||||
etc = os.listdir('/etc')
|
||||
etc = os.listdir(_UNIXCONFDIR)
|
||||
except OSError:
|
||||
# Probably not a Unix system
|
||||
return distname,version,id
|
||||
|
@ -331,7 +335,8 @@ def linux_distribution(distname='', version='', id='',
|
|||
return _dist_try_harder(distname,version,id)
|
||||
|
||||
# Read the first line
|
||||
with open('/etc/'+file, 'r') as f:
|
||||
with open(os.path.join(_UNIXCONFDIR, file), 'r',
|
||||
encoding='utf-8', errors='surrogateescape') as f:
|
||||
firstline = f.readline()
|
||||
_distname, _version, _id = _parse_release_file(firstline)
|
||||
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
from unittest import mock
|
||||
import contextlib
|
||||
import os
|
||||
import platform
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
import warnings
|
||||
|
||||
|
@ -295,6 +298,19 @@ class PlatformTest(unittest.TestCase):
|
|||
returncode = ret >> 8
|
||||
self.assertEqual(returncode, len(data))
|
||||
|
||||
def test_linux_distribution_encoding(self):
|
||||
# Issue #17429
|
||||
with tempfile.TemporaryDirectory() as tempdir:
|
||||
filename = os.path.join(tempdir, 'fedora-release')
|
||||
with open(filename, 'w', encoding='utf-8') as f:
|
||||
f.write('Fedora release 19 (Schr\xf6dinger\u2019s Cat)\n')
|
||||
|
||||
with mock.patch('platform._UNIXCONFDIR', tempdir):
|
||||
distname, version, distid = platform.linux_distribution()
|
||||
|
||||
self.assertEqual(distname, 'Fedora')
|
||||
self.assertEqual(version, '19')
|
||||
self.assertEqual(distid, 'Schr\xf6dinger\u2019s Cat')
|
||||
|
||||
def test_main():
|
||||
support.run_unittest(
|
||||
|
|
|
@ -711,6 +711,7 @@ Steven Kryskalla
|
|||
Andrew Kuchling
|
||||
Dave Kuhlman
|
||||
Jon Kuhn
|
||||
Toshio Kuratomi
|
||||
Vladimir Kushnir
|
||||
Erno Kuusela
|
||||
Ross Lagerwall
|
||||
|
|
|
@ -21,6 +21,12 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #17429: platform.linux_distribution() now decodes files from the UTF-8
|
||||
encoding with the surrogateescape error handler, instead of decoding from the
|
||||
locale encoding in strict mode. It fixes the function on Fedora 19 which is
|
||||
probably the first major distribution release with a non-ASCII name. Patch
|
||||
written by Toshio Kuratomi.
|
||||
|
||||
- Issue #19343: Expose FreeBSD-specific APIs in resource module. Original
|
||||
patch by Koobs.
|
||||
|
||||
|
|
Loading…
Reference in New Issue