#11062: Fix universal newline support in Babyl._install_message()

When adding a message from a binary file, \r\n was translated to
\r\r\n in the message body.
This commit is contained in:
Petri Lehtinen 2012-08-16 07:22:15 +03:00
parent 573b1fd779
commit 88614948c0
1 changed files with 10 additions and 3 deletions

View File

@ -1450,10 +1450,17 @@ class Babyl(_singlefileMailbox):
else:
break
while True:
buffer = message.read(4096) # Buffer size is arbitrary.
if not buffer:
line = message.readline()
if not line:
break
self._file.write(buffer.replace(b'\n', linesep))
# Universal newline support.
if line.endswith(b'\r\n'):
line = line[:-2] + linesep
elif line.endswith(b'\r'):
line = line[:-1] + linesep
elif line.endswith(b'\n'):
line = line[:-1] + linesep
self._file.write(line)
else:
raise TypeError('Invalid message type: %s' % type(message))
stop = self._file.tell()