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

Reply via email to