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):
|
def close(self):
|
||||||
# Don't forget any trailing partial line.
|
# Don't forget any trailing partial line.
|
||||||
self._lines.append(self._partial)
|
self._lines.append(self._partial)
|
||||||
|
self._partial = ''
|
||||||
self._closed = True
|
self._closed = True
|
||||||
|
|
||||||
def readline(self):
|
def readline(self):
|
||||||
|
@ -279,7 +280,7 @@ class FeedParser:
|
||||||
separator = '--' + boundary
|
separator = '--' + boundary
|
||||||
boundaryre = re.compile(
|
boundaryre = re.compile(
|
||||||
'(?P<sep>' + re.escape(separator) +
|
'(?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
|
capturing_preamble = True
|
||||||
preamble = []
|
preamble = []
|
||||||
linesep = False
|
linesep = False
|
||||||
|
|
|
@ -1351,6 +1351,20 @@ Content-Type: text/plain
|
||||||
eq(msg.get_boundary(), ' XXXX')
|
eq(msg.get_boundary(), ' XXXX')
|
||||||
eq(len(msg.get_payload()), 2)
|
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
|
# Test some badly formatted messages
|
||||||
|
|
Loading…
Reference in New Issue