# HG changeset patch # Parent d80f9977735aa747098cde7efdefab419ad5ebfb Issue #22406: Implement uu-codec in terms of uu.decode() diff -r d80f9977735a Lib/encodings/uu_codec.py --- a/Lib/encodings/uu_codec.py Mon Sep 15 06:23:20 2014 +0000 +++ b/Lib/encodings/uu_codec.py Mon Sep 15 06:45:41 2014 +0000 @@ -10,6 +10,7 @@ import codecs import binascii from io import BytesIO +import uu ### Codec APIs @@ -34,33 +35,10 @@ assert errors == 'strict' infile = BytesIO(input) outfile = BytesIO() - readline = infile.readline - write = outfile.write - - # Find start of encoded data - while 1: - s = readline() - if not s: - raise ValueError('Missing "begin" line in input data') - if s[:5] == b'begin': - break - - # Decode - while True: - s = readline() - if not s or s == b'end\n': - break - try: - 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 - data = binascii.a2b_uu(s[:nbytes]) - #sys.stderr.write("Warning: %s\n" % str(v)) - write(data) - if not s: - raise ValueError('Truncated input data') - + try: + uu.decode(infile, outfile, quiet=True) + except uu.Error as err: + raise ValueError(format(err)) return (outfile.getvalue(), len(input)) class Codec(codecs.Codec): diff -r d80f9977735a Lib/test/test_codecs.py --- a/Lib/test/test_codecs.py Mon Sep 15 06:23:20 2014 +0000 +++ b/Lib/test/test_codecs.py Mon Sep 15 06:45:41 2014 +0000 @@ -2562,6 +2562,10 @@ with self.subTest(alias=alias): 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