mirror of https://github.com/python/cpython
Issue #22406: Fixed the uu_codec codec incorrectly ported to 3.x.
Based on patch by Martin Panter.
This commit is contained in:
parent
e66bb96929
commit
519114df42
|
@ -54,7 +54,7 @@ def uu_decode(input, errors='strict'):
|
|||
data = binascii.a2b_uu(s)
|
||||
except binascii.Error as v:
|
||||
# Workaround for broken uuencoders by /Fredrik Lundh
|
||||
nbytes = (((ord(s[0])-32) & 63) * 4 + 5) / 3
|
||||
nbytes = (((s[0]-32) & 63) * 4 + 5) // 3
|
||||
data = binascii.a2b_uu(s[:nbytes])
|
||||
#sys.stderr.write("Warning: %s\n" % str(v))
|
||||
write(data)
|
||||
|
|
|
@ -2563,6 +2563,10 @@ class TransformCodecTest(unittest.TestCase):
|
|||
info = codecs.lookup(alias)
|
||||
self.assertEqual(info.name, expected_name)
|
||||
|
||||
def test_uu_invalid(self):
|
||||
# Missing "begin" line
|
||||
self.assertRaises(ValueError, codecs.decode, b"", "uu-codec")
|
||||
|
||||
|
||||
# The codec system tries to wrap exceptions in order to ensure the error
|
||||
# mentions the operation being performed and the codec involved. We
|
||||
|
|
|
@ -93,6 +93,28 @@ class UUTest(unittest.TestCase):
|
|||
except uu.Error as e:
|
||||
self.assertEqual(str(e), "No valid begin line found in input file")
|
||||
|
||||
def test_garbage_padding(self):
|
||||
# Issue #22406
|
||||
encodedtext = (
|
||||
b"begin 644 file\n"
|
||||
# length 1; bits 001100 111111 111111 111111
|
||||
b"\x21\x2C\x5F\x5F\x5F\n"
|
||||
b"\x20\n"
|
||||
b"end\n"
|
||||
)
|
||||
plaintext = b"\x33" # 00110011
|
||||
|
||||
with self.subTest("uu.decode()"):
|
||||
inp = io.BytesIO(encodedtext)
|
||||
out = io.BytesIO()
|
||||
uu.decode(inp, out, quiet=True)
|
||||
self.assertEqual(out.getvalue(), plaintext)
|
||||
|
||||
with self.subTest("uu_codec"):
|
||||
import codecs
|
||||
decoded = codecs.decode(encodedtext, "uu_codec")
|
||||
self.assertEqual(decoded, plaintext)
|
||||
|
||||
class UUStdIOTest(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
|
|
Loading…
Reference in New Issue