gh-91217: deprecate uu (GH-92009)
Automerge-Triggered-By: GH:brettcannon
This commit is contained in:
@@ -6,8 +6,8 @@
|
||||
|
||||
__all__ = ['Message', 'EmailMessage']
|
||||
|
||||
import binascii
|
||||
import re
|
||||
import uu
|
||||
import quopri
|
||||
from io import BytesIO, StringIO
|
||||
|
||||
@@ -35,7 +35,7 @@ def _splitparam(param):
|
||||
if not sep:
|
||||
return a.strip(), None
|
||||
return a.strip(), b.strip()
|
||||
|
||||
|
||||
def _formatparam(param, value=None, quote=True):
|
||||
"""Convenience function to format and return a key=value pair.
|
||||
|
||||
@@ -101,7 +101,37 @@ def _unquotevalue(value):
|
||||
return utils.unquote(value)
|
||||
|
||||
|
||||
|
||||
def _decode_uu(encoded):
|
||||
"""Decode uuencoded data."""
|
||||
decoded_lines = []
|
||||
encoded_lines_iter = iter(encoded.splitlines())
|
||||
for line in encoded_lines_iter:
|
||||
if line.startswith(b"begin "):
|
||||
mode, _, path = line.removeprefix(b"begin ").partition(b" ")
|
||||
try:
|
||||
int(mode, base=8)
|
||||
except ValueError:
|
||||
continue
|
||||
else:
|
||||
break
|
||||
else:
|
||||
raise ValueError("`begin` line not found")
|
||||
for line in encoded_lines_iter:
|
||||
if not line:
|
||||
raise ValueError("Truncated input")
|
||||
elif line.strip(b' \t\r\n\f') == b'end':
|
||||
break
|
||||
try:
|
||||
decoded_line = binascii.a2b_uu(line)
|
||||
except binascii.Error:
|
||||
# Workaround for broken uuencoders by /Fredrik Lundh
|
||||
nbytes = (((line[0]-32) & 63) * 4 + 5) // 3
|
||||
decoded_line = binascii.a2b_uu(line[:nbytes])
|
||||
decoded_lines.append(decoded_line)
|
||||
|
||||
return b''.join(decoded_lines)
|
||||
|
||||
|
||||
class Message:
|
||||
"""Basic message object.
|
||||
|
||||
@@ -288,13 +318,10 @@ class Message:
|
||||
self.policy.handle_defect(self, defect)
|
||||
return value
|
||||
elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'):
|
||||
in_file = BytesIO(bpayload)
|
||||
out_file = BytesIO()
|
||||
try:
|
||||
uu.decode(in_file, out_file, quiet=True)
|
||||
return out_file.getvalue()
|
||||
except uu.Error:
|
||||
# Some decoding problem
|
||||
return _decode_uu(bpayload)
|
||||
except ValueError:
|
||||
# Some decoding problem.
|
||||
return bpayload
|
||||
if isinstance(payload, str):
|
||||
return bpayload
|
||||
|
||||
Reference in New Issue
Block a user