New submission from Alex CHEN:

In file selectmodule.c

our static code scanner has reported the following case, function set2list is 
liable to return NULL (if PyTuple_New failed),  would any chance the NULL 
pointer be dereferenced (Py_DECREF(fdlist) after set2list) or it would just 
raise python exception to handle PyTuple_New error ?

static PyObject *
select_select(PyObject *self, PyObject *args)
{
    ......
    if (n < 0) {
        PyErr_SetFromErrno(SelectError);
    }
#endif
    else {
        /* any of these three calls can raise an exception.  it's more
           convenient to test for this after all three calls... but
           is that acceptable?
        */
        ifdlist = set2list(&ifdset, rfd2obj);          //   || <=====
        ofdlist = set2list(&ofdset, wfd2obj);          //   ||
        efdlist = set2list(&efdset, efd2obj);          //   ||
        if (PyErr_Occurred())
            ret = NULL;
        else
            ret = PyTuple_Pack(3, ifdlist, ofdlist, efdlist);

        Py_DECREF(ifdlist);
        Py_DECREF(ofdlist);
        Py_DECREF(efdlist);

----------
messages: 289967
nosy: alexc
priority: normal
severity: normal
status: open
title: Need a look for return value checking [selectmodule.c]

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue29874>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to