mirror of https://github.com/python/cpython
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.
This commit is contained in:
parent
f7f9b6cb2d
commit
2e8c1f189a
|
@ -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<sep>' + re.escape(separator) +
|
||||
r')(?P<end>--)?(?P<ws>[ \t]*)(?P<linesep>\r\n|\r|\n)$')
|
||||
r')(?P<end>--)?(?P<ws>[ \t]*)(?P<linesep>\r\n|\r|\n)?$')
|
||||
capturing_preamble = True
|
||||
preamble = []
|
||||
linesep = False
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue