Skip to content

Commit

Permalink
gh-80361: Fix TypeError in email.Message.get_payload() (GH-117994)
Browse files Browse the repository at this point in the history
It was raised when the charset is rfc2231 encoded, e.g.:

   Content-Type: text/plain; charset*=ansi-x3.4-1968''utf-8
  • Loading branch information
serhiy-storchaka authored Apr 17, 2024
1 parent c179c0e commit deaecb8
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Lib/email/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ def get_payload(self, i=None, decode=False):
try:
bpayload = payload.encode('ascii', 'surrogateescape')
try:
payload = bpayload.decode(self.get_param('charset', 'ascii'), 'replace')
payload = bpayload.decode(self.get_content_charset('ascii'), 'replace')
except LookupError:
payload = bpayload.decode('ascii', 'replace')
except UnicodeEncodeError:
Expand Down
15 changes: 15 additions & 0 deletions Lib/test/test_email/test_email.py
Original file line number Diff line number Diff line change
Expand Up @@ -4181,6 +4181,21 @@ def test_8bit_in_uuencode_body(self):
self.assertEqual(msg.get_payload(decode=True),
'<,.V<W1A; á \n'.encode('utf-8'))

def test_rfc2231_charset_8bit_CTE(self):
m = textwrap.dedent("""\
From: [email protected]
To: baz
Mime-Version: 1.0
Content-Type: text/plain; charset*=ansi-x3.4-1968''utf-8
Content-Transfer-Encoding: 8bit
pöstal
""").encode('utf-8')
msg = email.message_from_bytes(m)
self.assertEqual(msg.get_payload(), "pöstal\n")
self.assertEqual(msg.get_payload(decode=True),
"pöstal\n".encode('utf-8'))


headertest_headers = (
('From: [email protected]', ('From', '[email protected]')),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix TypeError in :func:`email.Message.get_payload` when the charset is :rfc:`2231`
encoded.

0 comments on commit deaecb8

Please sign in to comment.