--- trunk/Lib/imaplib.py 2010-04-03 14:57:03.000000000 +0200 +++ trunk-new/Lib/imaplib.py 2010-04-03 15:23:24.000000000 +0200 @@ -34,6 +34,7 @@ IMAP4_PORT = 143 IMAP4_SSL_PORT = 993 AllowedVersions = ('IMAP4REV1', 'IMAP4') # Most recent first +MAX_CHUNK = 64000 # Commands @@ -232,7 +233,19 @@ def read(self, size): """Read 'size' bytes from remote.""" - return self.file.read(size) + # don't read too much data at once + if size <= MAX_CHUNK: + data = self.file.read(size) + else: + chunks = [] + read = 0 + while read < size: + length = min(size - read, MAX_CHUNK) + datum = self.file.read(length) + read += length + chunks.append(datum) + data = ''.join(chunks) + return data def readline(self):