#1555570: correctly handle a \r\n that is split by the read buffer.

Patch and test by Tony Nelson.
This commit is contained in:
R. David Murray 2010-07-17 01:19:57 +00:00
parent cbe1a4e28f
commit 45bf773f60
3 changed files with 40 additions and 0 deletions

View file

@ -2454,6 +2454,39 @@ Do you like this message?
-Me
""")
def test_pushCR_LF(self):
'''FeedParser BufferedSubFile.push() assumed it received complete
line endings. A CR ending one push() followed by a LF starting
the next push() added an empty line.
'''
imt = [
("a\r \n", 2),
("b", 0),
("c\n", 1),
("", 0),
("d\r\n", 1),
("e\r", 0),
("\nf", 1),
("\r\n", 1),
]
from email.feedparser import BufferedSubFile, NeedMoreData
bsf = BufferedSubFile()
om = []
nt = 0
for il, n in imt:
bsf.push(il)
nt += n
n1 = 0
while True:
ol = bsf.readline()
if ol == NeedMoreData:
break
om.append(ol)
n1 += 1
self.assertTrue(n == n1)
self.assertTrue(len(om) == nt)
self.assertTrue(''.join([il for il, n in imt]) == ''.join(om))
class TestParsers(TestEmailBase):