This code in req.readlines() looks a bit fishy to me and possibly leaks memory.
The code in question is:
rlargs = PyTuple_New(0);
if (result == NULL)
return PyErr_NoMemory();
line = req_readline(self, rlargs);
while (line && ((linesize=PyString_Size(line))>0)) {
PyList_Append(result, line);
size += linesize;
if ((sizehint != -1) && (size >= sizehint))
break;
Py_DECREF(line);
line = req_readline(self, args);
}
Py_XDECREF(line);
The thing that looks wrong is 'rlargs'. This is created, used in a sub call to
req_readline() but then never destroyed. Thus, possibly a memory leak.
Next thing is that on the first read of a line, ie., call to req_readline(),
there will be no limit on size, as rlargs (empty tuple) is used. On subsequent
calls to req_readline() it passed the args from the caller instead of rlargs.
Depending on how req_readline() is implemented, this may not work
how want might think it might. Will need to investigate further.
Graham