summaryrefslogtreecommitdiffstats
path: root/Lib/email
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/email')
-rw-r--r--Lib/email/base64mime.py28
-rw-r--r--Lib/email/message.py5
-rw-r--r--Lib/email/quoprimime.py5
-rw-r--r--Lib/email/test/test_email.py6
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()