From c5c147289556d9941876bb4b209412ad52731eb0 Mon Sep 17 00:00:00 2001 From: R David Murray Date: Wed, 6 Apr 2011 08:13:02 -0400 Subject: #11605: don't use set/get_payload in feedparser; they do conversions. Really the whole API needs to be gone over to restore the separation of concerns; but that's what email6 is about. --- Lib/email/feedparser.py | 4 ++-- Lib/email/test/test_email.py | 47 ++++++++++++++++++++++++++++++++++++++++++++ Misc/NEWS | 3 +++ 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/Lib/email/feedparser.py b/Lib/email/feedparser.py index de8750d..60a8325 100644 --- a/Lib/email/feedparser.py +++ b/Lib/email/feedparser.py @@ -368,12 +368,12 @@ class FeedParser: end = len(mo.group(0)) self._last.epilogue = epilogue[:-end] else: - payload = self._last.get_payload() + payload = self._last._payload if isinstance(payload, str): mo = NLCRE_eol.search(payload) if mo: payload = payload[:-len(mo.group(0))] - self._last.set_payload(payload) + self._last._payload = payload self._input.pop_eof_matcher() self._pop_message() # Set the multipart up for newline cleansing, which will diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py index 245f659..b4dc575 100644 --- a/Lib/email/test/test_email.py +++ b/Lib/email/test/test_email.py @@ -3168,6 +3168,53 @@ class Test8BitBytesHandling(unittest.TestCase): g = email.generator.BytesGenerator(s) g.flatten(msg, linesep='\r\n') self.assertEqual(s.getvalue(), text) + + def test_8bit_multipart(self): + # Issue 11605 + source = textwrap.dedent("""\ + Date: Fri, 18 Mar 2011 17:15:43 +0100 + To: foo@example.com + From: foodwatch-Newsletter + Subject: Aktuelles zu Japan, Klonfleisch und Smiley-System + Message-ID: <76a486bee62b0d200f33dc2ca08220ad@localhost.localdomain> + MIME-Version: 1.0 + Content-Type: multipart/alternative; + boundary="b1_76a486bee62b0d200f33dc2ca08220ad" + + --b1_76a486bee62b0d200f33dc2ca08220ad + Content-Type: text/plain; charset="utf-8" + Content-Transfer-Encoding: 8bit + + Guten Tag, , + + mit großer Betroffenheit verfolgen auch wir im foodwatch-Team die + Nachrichten aus Japan. + + + --b1_76a486bee62b0d200f33dc2ca08220ad + Content-Type: text/html; charset="utf-8" + Content-Transfer-Encoding: 8bit + + + + + foodwatch - Newsletter + + +

mit großer Betroffenheit verfolgen auch wir im foodwatch-Team + die Nachrichten aus Japan.

+ + + --b1_76a486bee62b0d200f33dc2ca08220ad-- + + """).encode('utf-8') + msg = email.message_from_bytes(source) + s = BytesIO() + g = email.generator.BytesGenerator(s) + g.flatten(msg) + self.assertEqual(s.getvalue(), source) + maxDiff = None diff --git a/Misc/NEWS b/Misc/NEWS index 7ab3a5d..2ae7eaf 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -49,6 +49,9 @@ Core and Builtins Library ------- +- Issue #11605: email.parser.BytesFeedParser was incorrectly converting multipart + subpararts with an 8bit CTE into unicode instead of preserving the bytes. + - Issue #10963: Ensure that subprocess.communicate() never raises EPIPE. - Issue #11746: Fix SSLContext.load_cert_chain() to accept elliptic curve -- cgit v0.12