From: R David Murray Date: Wed, 6 Apr 2011 12:13:02 +0000 (-0400) Subject: #11605: don't use set/get_payload in feedparser; they do conversions. X-Git-Tag: v3.2.1b1~171 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c5c147289556d9941876bb4b209412ad52731eb0;p=python #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. --- diff --git a/Lib/email/feedparser.py b/Lib/email/feedparser.py index de8750dc16..60a83255c0 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 245f65999b..b4dc575ae6 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 7ab3a5d2be..2ae7eaf657 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