diff options
-rw-r--r-- | Lib/email/encoders.py | 15 | ||||
-rw-r--r-- | Lib/email/message.py | 11 | ||||
-rw-r--r-- | Lib/email/test/test_email.py | 2 | ||||
-rw-r--r-- | Lib/email/utils.py | 16 |
4 files changed, 10 insertions, 34 deletions
diff --git a/Lib/email/encoders.py b/Lib/email/encoders.py index 06016cd..2e77e61 100644 --- a/Lib/email/encoders.py +++ b/Lib/email/encoders.py @@ -11,8 +11,8 @@ __all__ = [ 'encode_quopri', ] -import base64 +from base64 import b64encode as _bencode from quopri import encodestring as _encodestring @@ -23,19 +23,6 @@ def _qencode(s): return enc.replace(' ', '=20') -def _bencode(s): - # We can't quite use base64.encodestring() since it tacks on a "courtesy - # newline". Blech! - if not s: - return s - hasnewline = (s[-1] == '\n') - value = base64.encodestring(s) - if not hasnewline and value[-1] == '\n': - return value[:-1] - return value - - - def encode_base64(msg): """Encode the message's payload in Base64. diff --git a/Lib/email/message.py b/Lib/email/message.py index e368737..ff262c7 100644 --- a/Lib/email/message.py +++ b/Lib/email/message.py @@ -8,6 +8,7 @@ __all__ = ['Message'] import re import uu +import base64 import binascii import warnings from io import BytesIO, StringIO @@ -196,12 +197,14 @@ class Message: return utils._qdecode(payload) elif cte == 'base64': try: - return utils._bdecode(payload) + if isinstance(payload, str): + payload = payload.encode('raw-unicode-escape') + return base64.b64decode(payload) + #return utils._bdecode(payload) except binascii.Error: # Incorrect padding pass elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'): - payload += '\n' in_file = BytesIO(payload.encode('raw-unicode-escape')) out_file = BytesIO() try: @@ -212,7 +215,9 @@ class Message: pass # Is there a better way to do this? We can't use the bytes # constructor. - return bytes(payload, 'raw-unicode-escape') + if isinstance(payload, str): + return payload.encode('raw-unicode-escape') + return payload def set_payload(self, payload, charset=None): """Set the payload to the given value. diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py index ef11e17..15c8325 100644 --- a/Lib/email/test/test_email.py +++ b/Lib/email/test/test_email.py @@ -1012,7 +1012,7 @@ class TestMIMEImage(unittest.TestCase): class TestMIMEApplication(unittest.TestCase): def test_headers(self): eq = self.assertEqual - msg = MIMEApplication('\xfa\xfb\xfc\xfd\xfe\xff') + msg = MIMEApplication(b'\xfa\xfb\xfc\xfd\xfe\xff') eq(msg.get_content_type(), 'application/octet-stream') eq(msg['content-transfer-encoding'], 'base64') diff --git a/Lib/email/utils.py b/Lib/email/utils.py index 5771209..8747110 100644 --- a/Lib/email/utils.py +++ b/Lib/email/utils.py @@ -55,22 +55,6 @@ escapesre = re.compile(r'[][\\()"]') # Helpers -def _identity(s): - return s - - -def _bdecode(s): - # We can't quite use base64.encodestring() since it tacks on a "courtesy - # newline". Blech! - if not s: - return s - value = base64.decodestring(s) - if not s.endswith('\n') and value.endswith('\n'): - return value[:-1] - return value - - - def formataddr(pair): """The inverse of parseaddr(), this takes a 2-tuple of the form (realname, email_address) and returns the string value suitable |