diff -r b3f410dbab25 Lib/imaplib.py --- a/Lib/imaplib.py Fri May 20 11:49:06 2011 -0500 +++ b/Lib/imaplib.py Sat May 21 12:06:41 2011 +0200 @@ -22,7 +22,7 @@ __version__ = "2.58" -import binascii, errno, random, re, socket, subprocess, sys, time +import binascii, errno, cStringIO, random, re, socket, subprocess, sys, time __all__ = ["IMAP4", "IMAP4_stream", "Internaldate2tuple", "Int2AP", "ParseFlags", "Time2Internaldate"] @@ -1163,23 +1163,22 @@ def read(self, size): """Read 'size' bytes from remote.""" # sslobj.read() sometimes returns < size bytes - chunks = [] + chunk = cStringIO.StringIO() read = 0 while read < size: - data = self.sslobj.read(min(size-read, 16384)) + data = self.sslobj.read(min(size-read, 4096)) read += len(data) - chunks.append(data) - - return ''.join(chunks) + chunk.write(data) + return chunk.getvalue() def readline(self): """Read line from remote.""" - line = [] + line = cStringIO.StringIO() while 1: char = self.sslobj.read(1) - line.append(char) - if char in ("\n", ""): return ''.join(line) + line.write(char) + if char in ("\n", ""): return line.getvalue() def send(self, data):