From 2e8c1f189a497179b7fd7bd5dad61c3189167849 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Sun, 28 Nov 2004 00:21:42 +0000 Subject: Fix for SF bug #1072623. When the last line of the input string does not end in a newline, and it's an end boundary, the FeedParser wasn't recognizing it as such. Tweak the regexp to make the ending linesep optional. For grins, clear self._partial when closing the BufferedSubFile. Added a test case. --- Lib/email/FeedParser.py | 3 ++- Lib/email/test/test_email.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Lib/email/FeedParser.py b/Lib/email/FeedParser.py index 1d6e3dd..690b7c2 100644 --- a/Lib/email/FeedParser.py +++ b/Lib/email/FeedParser.py @@ -62,6 +62,7 @@ class BufferedSubFile(object): def close(self): # Don't forget any trailing partial line. self._lines.append(self._partial) + self._partial = '' self._closed = True def readline(self): @@ -279,7 +280,7 @@ class FeedParser: separator = '--' + boundary boundaryre = re.compile( '(?P' + re.escape(separator) + - r')(?P--)?(?P[ \t]*)(?P\r\n|\r|\n)$') + r')(?P--)?(?P[ \t]*)(?P\r\n|\r|\n)?$') capturing_preamble = True preamble = [] linesep = False diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py index 2fcd859..c620442 100644 --- a/Lib/email/test/test_email.py +++ b/Lib/email/test/test_email.py @@ -1351,6 +1351,20 @@ Content-Type: text/plain eq(msg.get_boundary(), ' XXXX') eq(len(msg.get_payload()), 2) + def test_boundary_without_trailing_newline(self): + m = Parser().parsestr("""\ +Content-Type: multipart/mixed; boundary="===============0012394164==" +MIME-Version: 1.0 + +--===============0012394164== +Content-Type: image/file1.jpg +MIME-Version: 1.0 +Content-Transfer-Encoding: base64 + +YXNkZg== +--===============0012394164==--""") + self.assertEquals(m.get_payload(0).get_payload(), 'YXNkZg==') + # Test some badly formatted messages -- cgit v0.12