]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Merged revisions 81675 via svnmerge from
authorR. David Murray <rdmurray@bitdance.com>
Wed, 16 Jun 2010 00:57:25 +0000 (00:57 +0000)
committerR. David Murray <rdmurray@bitdance.com>
Wed, 16 Jun 2010 00:57:25 +0000 (00:57 +0000)
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.
........

Lib/email/feedparser.py
Lib/email/test/test_email.py
Misc/NEWS

index afb02b32b24a2b75f2038f1bdf19c0f6af6b8253..163fadafd4ac7e26f7650b0ed71f44d37bc92c6a 100644 (file)
@@ -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 ":".
index 350d0b0e92a79e325c90366aaac20758c1cd32f7..6c23693cf117c715c0d840ed1e2eeca91ac5ab70 100644 (file)
@@ -2590,6 +2590,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'))
 
 \f
 class TestBase64(unittest.TestCase):
index fee5682cd4319d3d52c017ef4ddd73b7c41948b4..a9cd9bdf71b1fc284bc42cbba0c232dc6be6d958 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -71,6 +71,9 @@ C-API
 Library
 -------
 
+- Issue #5610: feedparser no longer eats extra characters at the end of
+  a body part if the body part ends with a \r\n.
+
 - Issue #8924: logging: Improved error handling for Unicode in exception text.
 
 - Fix codecs.escape_encode to return the correct consumed size.