From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Sat, 12 Jul 2025 13:52:54 +0000 (+0200) Subject: [3.13] gh-134759: fix `UnboundLocalError` in `email.message.Message.get_payload`... X-Git-Tag: v3.13.6~94 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6176101b4a3cf6094b75e3d1d3852807f8544306;p=thirdparty%2FPython%2Fcpython.git [3.13] gh-134759: fix `UnboundLocalError` in `email.message.Message.get_payload` (GH-136071) (#136580) gh-134759: fix `UnboundLocalError` in `email.message.Message.get_payload` (GH-136071) (cherry picked from commit 25335d297b5248922a4c82183bcdf0c0ada8352b) Co-authored-by: Kliment Lamonov Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> --- diff --git a/Lib/email/message.py b/Lib/email/message.py index f48fcd2ea925..37771f97b0c8 100644 --- a/Lib/email/message.py +++ b/Lib/email/message.py @@ -313,6 +313,8 @@ class Message: # If it does happen, turn the string into bytes in a way # guaranteed not to fail. bpayload = payload.encode('raw-unicode-escape') + else: + bpayload = payload if cte == 'quoted-printable': return quopri.decodestring(bpayload) elif cte == 'base64': diff --git a/Lib/test/test_email/test_message.py b/Lib/test/test_email/test_message.py index 96979db27f3a..411524fef662 100644 --- a/Lib/test/test_email/test_message.py +++ b/Lib/test/test_email/test_message.py @@ -1031,6 +1031,15 @@ class TestEmailMessage(TestEmailMessageBase, TestEmailBase): # AttributeError: 'str' object has no attribute 'is_attachment' m.get_body() + def test_get_bytes_payload_with_quoted_printable_encoding(self): + # We use a memoryview to avoid directly changing the private payload + # and to prevent using the dedicated paths for string or bytes objects. + payload = memoryview(b'Some payload') + m = self._make_message() + m.add_header('Content-Transfer-Encoding', 'quoted-printable') + m.set_payload(payload) + self.assertEqual(m.get_payload(decode=True), payload) + class TestMIMEPart(TestEmailMessageBase, TestEmailBase): # Doing the full test run here may seem a bit redundant, since the two diff --git a/Misc/ACKS b/Misc/ACKS index d0aaf75ebcc1..6cc30812cced 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1040,6 +1040,7 @@ Alexander Lakeev David Lam Thomas Lamb Valerie Lambert +Kliment Lamonov Peter Lamut Jean-Baptiste "Jiba" Lamy Ronan Lamy diff --git a/Misc/NEWS.d/next/Library/2025-06-28-11-32-57.gh-issue-134759.AjjKcG.rst b/Misc/NEWS.d/next/Library/2025-06-28-11-32-57.gh-issue-134759.AjjKcG.rst new file mode 100644 index 000000000000..79b853209269 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-06-28-11-32-57.gh-issue-134759.AjjKcG.rst @@ -0,0 +1,2 @@ +Fix :exc:`UnboundLocalError` in :func:`email.message.Message.get_payload` when +the payload to decode is a :class:`bytes` object. Patch by Kliment Lamonov.