summaryrefslogtreecommitdiff
path: root/Lib/email
diff options
context:
space:
mode:
authorR. David Murray <rdmurray@bitdance.com>2010-06-16 02:22:56 +0000
committerR. David Murray <rdmurray@bitdance.com>2010-06-16 02:22:56 +0000
commit71df9d92161fda464f508cccb4c025b3c4a2c1b1 (patch)
tree3cab1ee51c98e116155bce4f1cc9f11bf3b297c2 /Lib/email
parent24d83873ebbeff5bad465457579cd0c5ef02676e (diff)
downloadcpython-git-71df9d92161fda464f508cccb4c025b3c4a2c1b1.tar.gz
Merged revisions 82011 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r82011 | r.david.murray | 2010-06-15 22:19:40 -0400 (Tue, 15 Jun 2010) | 17 lines Merged revisions 81675 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r81675 | r.david.murray | 2010-06-03 11:43:20 -0400 (Thu, 03 Jun 2010) | 10 lines #5610: use \Z not $ so we don't eat extra chars when body part ends with \r\n. If a body part ended with \r\n, feedparser, using '$' to terminate its search for the newline, would match on the \r\n, and think that it needed to strip two characters in order to account for the line end before the boundary. That made it chop one too many characters off the end of the body part. Using \Z makes the match correct. Patch and test by Tony Nelson. ........ ................
Diffstat (limited to 'Lib/email')
-rw-r--r--Lib/email/feedparser.py2
-rw-r--r--Lib/email/test/test_email.py18
2 files changed, 19 insertions, 1 deletions
diff --git a/Lib/email/feedparser.py b/Lib/email/feedparser.py
index bff17ba16c..a6853c2b6d 100644
--- a/Lib/email/feedparser.py
+++ b/Lib/email/feedparser.py
@@ -28,7 +28,7 @@ from email import message
NLCRE = re.compile('\r\n|\r|\n')
NLCRE_bol = re.compile('(\r\n|\r|\n)')
-NLCRE_eol = re.compile('(\r\n|\r|\n)$')
+NLCRE_eol = re.compile('(\r\n|\r|\n)\Z')
NLCRE_crack = re.compile('(\r\n|\r|\n)')
# RFC 2822 $3.6.8 Optional fields. ftext is %d33-57 / %d59-126, Any character
# except controls, SP, and ":".
diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py
index 395e2003a7..0ded3d9c9c 100644
--- a/Lib/email/test/test_email.py
+++ b/Lib/email/test/test_email.py
@@ -2584,6 +2584,24 @@ Here's the message body
eq(headers, ['A', 'B', 'CC'])
eq(msg.get_payload(), 'body')
+ def test_CRLFLF_at_end_of_part(self):
+ # issue 5610: feedparser should not eat two chars from body part ending
+ # with "\r\n\n".
+ m = (
+ "From: foo@bar.com\n"
+ "To: baz\n"
+ "Mime-Version: 1.0\n"
+ "Content-Type: multipart/mixed; boundary=BOUNDARY\n"
+ "\n"
+ "--BOUNDARY\n"
+ "Content-Type: text/plain\n"
+ "\n"
+ "body ending with CRLF newline\r\n"
+ "\n"
+ "--BOUNDARY--\n"
+ )
+ msg = email.message_from_string(m)
+ self.assertTrue(msg.get_payload(0).get_payload().endswith('\r\n'))
class TestBase64(unittest.TestCase):