Issue #28992: Use bytes.fromhex().
This commit is contained in:
parent
47bdc40352
commit
8cbd3df3ce
|
@ -62,7 +62,7 @@ __all__ = ['decode_q',
|
||||||
|
|
||||||
# regex based decoder.
|
# regex based decoder.
|
||||||
_q_byte_subber = functools.partial(re.compile(br'=([a-fA-F0-9]{2})').sub,
|
_q_byte_subber = functools.partial(re.compile(br'=([a-fA-F0-9]{2})').sub,
|
||||||
lambda m: bytes([int(m.group(1), 16)]))
|
lambda m: bytes.fromhex(m.group(1)))
|
||||||
|
|
||||||
def decode_q(encoded):
|
def decode_q(encoded):
|
||||||
encoded = encoded.replace(b'_', b' ')
|
encoded = encoded.replace(b'_', b' ')
|
||||||
|
|
|
@ -338,7 +338,7 @@ class TestBase_Mapping(unittest.TestCase):
|
||||||
uc = re.findall('<a u="([A-F0-9]{4})" b="([0-9A-F ]+)"/>', ucmdata)
|
uc = re.findall('<a u="([A-F0-9]{4})" b="([0-9A-F ]+)"/>', ucmdata)
|
||||||
for uni, coded in uc:
|
for uni, coded in uc:
|
||||||
unich = chr(int(uni, 16))
|
unich = chr(int(uni, 16))
|
||||||
codech = bytes(int(c, 16) for c in coded.split())
|
codech = bytes.fromhex(coded)
|
||||||
self._testpoint(codech, unich)
|
self._testpoint(codech, unich)
|
||||||
|
|
||||||
def test_mapping_supplemental(self):
|
def test_mapping_supplemental(self):
|
||||||
|
|
|
@ -1793,9 +1793,6 @@ class UnicodeTest(string_tests.CommonTest,
|
||||||
self.assertEqual(seq.decode('utf-8', 'ignore'),
|
self.assertEqual(seq.decode('utf-8', 'ignore'),
|
||||||
res.replace('\uFFFD', ''))
|
res.replace('\uFFFD', ''))
|
||||||
|
|
||||||
def to_bytestring(self, seq):
|
|
||||||
return bytes(int(c, 16) for c in seq.split())
|
|
||||||
|
|
||||||
def assertCorrectUTF8Decoding(self, seq, res, err):
|
def assertCorrectUTF8Decoding(self, seq, res, err):
|
||||||
"""
|
"""
|
||||||
Check that an invalid UTF-8 sequence raises a UnicodeDecodeError when
|
Check that an invalid UTF-8 sequence raises a UnicodeDecodeError when
|
||||||
|
@ -1851,7 +1848,7 @@ class UnicodeTest(string_tests.CommonTest,
|
||||||
]
|
]
|
||||||
FFFD = '\ufffd'
|
FFFD = '\ufffd'
|
||||||
for seq in sequences:
|
for seq in sequences:
|
||||||
self.assertCorrectUTF8Decoding(self.to_bytestring(seq), '\ufffd',
|
self.assertCorrectUTF8Decoding(bytes.fromhex(seq), '\ufffd',
|
||||||
'unexpected end of data')
|
'unexpected end of data')
|
||||||
|
|
||||||
def test_invalid_cb_for_2bytes_seq(self):
|
def test_invalid_cb_for_2bytes_seq(self):
|
||||||
|
@ -1873,7 +1870,7 @@ class UnicodeTest(string_tests.CommonTest,
|
||||||
('DF C0', FFFDx2), ('DF FF', FFFDx2),
|
('DF C0', FFFDx2), ('DF FF', FFFDx2),
|
||||||
]
|
]
|
||||||
for seq, res in sequences:
|
for seq, res in sequences:
|
||||||
self.assertCorrectUTF8Decoding(self.to_bytestring(seq), res,
|
self.assertCorrectUTF8Decoding(bytes.fromhex(seq), res,
|
||||||
'invalid continuation byte')
|
'invalid continuation byte')
|
||||||
|
|
||||||
def test_invalid_cb_for_3bytes_seq(self):
|
def test_invalid_cb_for_3bytes_seq(self):
|
||||||
|
@ -1931,7 +1928,7 @@ class UnicodeTest(string_tests.CommonTest,
|
||||||
('EF BF C0', FFFDx2), ('EF BF FF', FFFDx2),
|
('EF BF C0', FFFDx2), ('EF BF FF', FFFDx2),
|
||||||
]
|
]
|
||||||
for seq, res in sequences:
|
for seq, res in sequences:
|
||||||
self.assertCorrectUTF8Decoding(self.to_bytestring(seq), res,
|
self.assertCorrectUTF8Decoding(bytes.fromhex(seq), res,
|
||||||
'invalid continuation byte')
|
'invalid continuation byte')
|
||||||
|
|
||||||
def test_invalid_cb_for_4bytes_seq(self):
|
def test_invalid_cb_for_4bytes_seq(self):
|
||||||
|
@ -2010,7 +2007,7 @@ class UnicodeTest(string_tests.CommonTest,
|
||||||
('F4 8F BF C0', FFFDx2), ('F4 8F BF FF', FFFDx2)
|
('F4 8F BF C0', FFFDx2), ('F4 8F BF FF', FFFDx2)
|
||||||
]
|
]
|
||||||
for seq, res in sequences:
|
for seq, res in sequences:
|
||||||
self.assertCorrectUTF8Decoding(self.to_bytestring(seq), res,
|
self.assertCorrectUTF8Decoding(bytes.fromhex(seq), res,
|
||||||
'invalid continuation byte')
|
'invalid continuation byte')
|
||||||
|
|
||||||
def test_codecs_idna(self):
|
def test_codecs_idna(self):
|
||||||
|
|
|
@ -574,7 +574,7 @@ def unquote_to_bytes(string):
|
||||||
# if the function is never called
|
# if the function is never called
|
||||||
global _hextobyte
|
global _hextobyte
|
||||||
if _hextobyte is None:
|
if _hextobyte is None:
|
||||||
_hextobyte = {(a + b).encode(): bytes([int(a + b, 16)])
|
_hextobyte = {(a + b).encode(): bytes.fromhex(a + b)
|
||||||
for a in _hexdig for b in _hexdig}
|
for a in _hexdig for b in _hexdig}
|
||||||
for item in bits[1:]:
|
for item in bits[1:]:
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue