Kaydet (Commit) e63fde72 authored tarafından Andrew M. Kuchling's avatar Andrew M. Kuchling

[Bug #792570] Under Windows, socket.read() seems to run into trouble when

asked to read tens of megabytes of data.  On my Mac, it hits MemoryErrors
when reading around 15Mb in one chunk.  The fix is to read the body in several
parts, not as one big piece.

It would be nice to fix the underlying socket.read() problem, too.

2.4 bugfix candidate.
üst 3a976055
......@@ -422,8 +422,19 @@ class SimpleXMLRPCRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
"""
try:
# get arguments
data = self.rfile.read(int(self.headers["content-length"]))
# Get arguments by reading body of request.
# We read this in chunks to avoid straining
# socket.read(); around the 10 or 15Mb mark, some platforms
# begin to have problems (bug #792570).
max_chunk_size = 10*1024*1024
size_remaining = int(self.headers["content-length"])
L = []
while size_remaining:
chunk_size = min(size_remaining, max_chunk_size)
L.append(self.rfile.read(chunk_size))
size_remaining -= len(L[-1])
data = ''.join(L)
# In previous versions of SimpleXMLRPCServer, _dispatch
# could be overridden in this class, instead of in
# SimpleXMLRPCDispatcher. To maintain backwards compatibility,
......
......@@ -451,6 +451,9 @@ Library
- Bug #1222790: in SimpleXMLRPCServer, set the reuse-address and close-on-exec
flags on the HTTP listening socket.
- Bug #792570: SimpleXMLRPCServer had problems if the request grew too large.
Fixed by reading the HTTP body in chunks instead of one big socket.read().
- Bug #1110478: Revert os.environ.update to do putenv again.
- Bug #1103844: fix distutils.install.dump_dirs() with negated options.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment