Skip to content

Commit deaecb8

Browse files
gh-80361: Fix TypeError in email.Message.get_payload() (GH-117994)
It was raised when the charset is rfc2231 encoded, e.g.: Content-Type: text/plain; charset*=ansi-x3.4-1968''utf-8
1 parent c179c0e commit deaecb8

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

Lib/email/message.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ def get_payload(self, i=None, decode=False):
294294
try:
295295
bpayload = payload.encode('ascii', 'surrogateescape')
296296
try:
297-
payload = bpayload.decode(self.get_param('charset', 'ascii'), 'replace')
297+
payload = bpayload.decode(self.get_content_charset('ascii'), 'replace')
298298
except LookupError:
299299
payload = bpayload.decode('ascii', 'replace')
300300
except UnicodeEncodeError:

Lib/test/test_email/test_email.py

+15
Original file line numberDiff line numberDiff line change
@@ -4181,6 +4181,21 @@ def test_8bit_in_uuencode_body(self):
41814181
self.assertEqual(msg.get_payload(decode=True),
41824182
'<,.V<W1A; á \n'.encode('utf-8'))
41834183

4184+
def test_rfc2231_charset_8bit_CTE(self):
4185+
m = textwrap.dedent("""\
4186+
From: foo@bar.com
4187+
To: baz
4188+
Mime-Version: 1.0
4189+
Content-Type: text/plain; charset*=ansi-x3.4-1968''utf-8
4190+
Content-Transfer-Encoding: 8bit
4191+
4192+
pöstal
4193+
""").encode('utf-8')
4194+
msg = email.message_from_bytes(m)
4195+
self.assertEqual(msg.get_payload(), "pöstal\n")
4196+
self.assertEqual(msg.get_payload(decode=True),
4197+
"pöstal\n".encode('utf-8'))
4198+
41844199

41854200
headertest_headers = (
41864201
('From: foo@bar.com', ('From', 'foo@bar.com')),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix TypeError in :func:`email.Message.get_payload` when the charset is :rfc:`2231`
2+
encoded.

0 commit comments

Comments
 (0)