if i is not None and not isinstance(self._payload, list):
raise TypeError('Expected list, got %s' % type(self._payload))
payload = self._payload
- # cte might be a Header, so for now stringify it.
- cte = str(self.get('content-transfer-encoding', '')).lower()
+ cte = self.get('content-transfer-encoding', '')
+ if hasattr(cte, 'cte'):
+ cte = cte.cte
+ else:
+ # cte might be a Header, so for now stringify it.
+ cte = str(cte).strip().lower()
# payload may be bytes here.
if not decode:
if isinstance(payload, str) and utils._has_surrogates(payload):
w4kgdGVzdGFiYwo=
"""))
+ def test_string_payload_with_base64_cte(self):
+ msg = email.message_from_string(textwrap.dedent("""\
+ Content-Transfer-Encoding: base64
+
+ SGVsbG8uIFRlc3Rpbmc=
+ """), policy=email.policy.default)
+ self.assertEqual(msg.get_payload(decode=True), b"Hello. Testing")
+ self.assertDefectsEqual(msg['content-transfer-encoding'].defects, [])
+
+
# Test the email.encoders module
class TestEncoders(unittest.TestCase):
self.assertDefectsEqual(msg.defects,
[errors.MissingHeaderBodySeparatorDefect])
+ def test_string_payload_with_extra_space_after_cte(self):
+ # https://github.com/python/cpython/issues/98188
+ cte = "base64 "
+ msg = email.message_from_string(textwrap.dedent(f"""\
+ Content-Transfer-Encoding: {cte}
+
+ SGVsbG8uIFRlc3Rpbmc=
+ """), policy=email.policy.default)
+ self.assertEqual(msg.get_payload(decode=True), b"Hello. Testing")
+ self.assertDefectsEqual(msg['content-transfer-encoding'].defects, [])
+
+ def test_string_payload_with_extra_text_after_cte(self):
+ msg = email.message_from_string(textwrap.dedent("""\
+ Content-Transfer-Encoding: base64 some text
+
+ SGVsbG8uIFRlc3Rpbmc=
+ """), policy=email.policy.default)
+ self.assertEqual(msg.get_payload(decode=True), b"Hello. Testing")
+ cte = msg['content-transfer-encoding']
+ self.assertDefectsEqual(cte.defects, [email.errors.InvalidHeaderDefect])
+
+ def test_string_payload_with_extra_space_after_cte_compat32(self):
+ cte = "base64 "
+ msg = email.message_from_string(textwrap.dedent(f"""\
+ Content-Transfer-Encoding: {cte}
+
+ SGVsbG8uIFRlc3Rpbmc=
+ """), policy=email.policy.compat32)
+ pasted_cte = msg['content-transfer-encoding']
+ self.assertEqual(pasted_cte, cte)
+ self.assertEqual(msg.get_payload(decode=True), b"Hello. Testing")
+ self.assertDefectsEqual(msg.defects, [])
+
+
# Test RFC 2047 header encoding and decoding
class TestRFC2047(TestEmailBase):