diff options
Diffstat (limited to 'Lib/email')
-rw-r--r-- | Lib/email/base64mime.py | 28 | ||||
-rw-r--r-- | Lib/email/message.py | 5 | ||||
-rw-r--r-- | Lib/email/quoprimime.py | 5 | ||||
-rw-r--r-- | Lib/email/test/test_email.py | 6 |
4 files changed, 20 insertions, 24 deletions
diff --git a/Lib/email/base64mime.py b/Lib/email/base64mime.py index 0319bbb..e309f30 100644 --- a/Lib/email/base64mime.py +++ b/Lib/email/base64mime.py @@ -109,7 +109,7 @@ def header_encode(header, charset='iso-8859-1', keep_eols=False, lines = [] for line in base64ed: # Ignore the last character of each line if it is a newline - if line.endswith(NL): + if line[-1] == ord(NL): line = line[:-1] # Add the chrome lines.append('=?%s?b?%s?=' % (charset, line)) @@ -158,25 +158,19 @@ encodestring = encode -def decode(s, convert_eols=False): +def decode(string): """Decode a raw base64 string, returning a bytes object. - If convert_eols is set to a string value, all canonical email linefeeds, - e.g. "\\r\\n", in the decoded text will be converted to the value of - convert_eols. os.linesep is a good choice for convert_eols if you are - decoding a text attachment. - - This function does not parse a full MIME header value encoded with - base64 (like =?iso-8895-1?b?bmloISBuaWgh?=) -- please use the high - level email.Header class for that functionality. + This function does not parse a full MIME header value encoded with base64 + (like =?iso-8895-1?b?bmloISBuaWgh?=) -- use the high level + email.Header class for that functionality. """ - if not s: - return s - - dec = a2b_base64(s) - if convert_eols: - return dec.replace(CRLF, convert_eols) - return dec + if not string: + return bytes() + elif isinstance(string, str): + return a2b_base64(string.encode('raw-unicode-escape')) + else: + return a2b_base64(string) # For convenience and backwards compatibility w/ standard base64 module diff --git a/Lib/email/message.py b/Lib/email/message.py index 539af90..ad795f9 100644 --- a/Lib/email/message.py +++ b/Lib/email/message.py @@ -201,7 +201,7 @@ class Message: # Incorrect padding pass elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'): - in_file = BytesIO(bytes(payload + '\n')) + in_file = BytesIO((payload + '\n').encode('raw-unicode-escape')) out_file = BytesIO() try: uu.decode(in_file, out_file, quiet=True) @@ -757,7 +757,8 @@ class Message: # LookupError will be raised if the charset isn't known to # Python. UnicodeError will be raised if the encoded text # contains a character not in the charset. - charset = str(bytes(charset[2]), pcharset) + as_bytes = charset[2].encode('raw-unicode-escape') + charset = str(as_bytes, pcharset) except (LookupError, UnicodeError): charset = charset[2] # charset characters must be in us-ascii range diff --git a/Lib/email/quoprimime.py b/Lib/email/quoprimime.py index ce624d9..dfd3ccb 100644 --- a/Lib/email/quoprimime.py +++ b/Lib/email/quoprimime.py @@ -55,7 +55,10 @@ EMPTYSTRING = '' # See also Charset.py MISC_LEN = 7 -HEADER_SAFE_BYTES = b'-!*+/ ' + bytes(ascii_letters) + bytes(digits) +HEADER_SAFE_BYTES = (b'-!*+/ ' + + ascii_letters.encode('raw-unicode-escape') + + digits.encode('raw-unicode-escape')) + BODY_SAFE_BYTES = (b' !"#$%&\'()*+,-./0123456789:;<>' b'?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`' b'abcdefghijklmnopqrstuvwxyz{|}~\t') diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py index fc8224a..981441c 100644 --- a/Lib/email/test/test_email.py +++ b/Lib/email/test/test_email.py @@ -2531,10 +2531,8 @@ class TestBase64(unittest.TestCase): def test_decode(self): eq = self.assertEqual - eq(base64mime.decode(''), '') + eq(base64mime.decode(''), b'') eq(base64mime.decode('aGVsbG8='), b'hello') - eq(base64mime.decode('aGVsbG8=', 'X'), b'hello') - eq(base64mime.decode('aGVsbG8NCndvcmxk\n', 'X'), b'helloXworld') def test_encode(self): eq = self.assertEqual @@ -2844,7 +2842,7 @@ class TestHeader(TestEmailBase): def test_empty_header_encode(self): h = Header() self.assertEqual(h.encode(), '') - + def test_header_ctor_default_args(self): eq = self.ndiffAssertEqual h = Header() |