You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mod_python-dev@quetz.apache.org by "Graham Dumpleton (JIRA)" <ji...@apache.org> on 2007/01/14 05:03:27 UTC

[jira] Created: (MODPYTHON-211) Potential memory leak in req.readlines().

Potential memory leak in req.readlines().
-----------------------------------------

                 Key: MODPYTHON-211
                 URL: https://issues.apache.org/jira/browse/MODPYTHON-211
             Project: mod_python
          Issue Type: Bug
          Components: core
    Affects Versions: 3.2.10, 3.3
            Reporter: Graham Dumpleton


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.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] Commented: (MODPYTHON-211) Potential memory leak in req.readlines().

Posted by "Graham Dumpleton (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/MODPYTHON-211?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12465940 ] 

Graham Dumpleton commented on MODPYTHON-211:
--------------------------------------------

The req.readlines() function also leaks memory when invalid arguments are supplied to the function. This is because of the code:

    PyObject *result = PyList_New(0);

    ...

    if (! PyArg_ParseTuple(args, "|l", &sizehint))
        return NULL;

That is, it allocates a result array but doesn't destroy it when arguments couldn't be decoded.

The result object isn't destroyed in a couple of other failure cases as well, such as when rlargs can't be created or req.readline() sets an exception.

> Potential memory leak in req.readlines().
> -----------------------------------------
>
>                 Key: MODPYTHON-211
>                 URL: https://issues.apache.org/jira/browse/MODPYTHON-211
>             Project: mod_python
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.3, 3.2.10
>            Reporter: Graham Dumpleton
>
> 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.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira