Closed
Description
cpython/Python/generated_cases.c.h
Lines 1648 to 1667 in 36b139a
&
Lines 1303 to 1316 in 36b139a
Doesn't take in account case, when PySet_New(NULL)
returns NULL.
We are checking that PySet_Add
doesn't return a non-zero(-1) value.
But, PySet_Add
has a check, that first argument is a subclass of set
. Which fails, if we will pass (PyObject *) NULL
as first argument. Why?
#define PySet_Check(ob) \ (Py_IS_TYPE((ob), &PySet_Type) || \ PyType_IsSubtype(Py_TYPE(ob), &PySet_Type))
PySet_Add
uses this macross. But, Py_TYPE
will be failed with segfault when try to access ob_type
of (PyObject *) NULL
.
Implementation of Py_TYPE
:
static inline PyTypeObject* Py_TYPE(PyObject *ob) { return ob->ob_type; }
(gdb) call (PyObject *) NULL $1 = (PyObject *) 0x0 (gdb) call $1->ob_type Cannot access memory at address 0x8
So, we should add check, that value of PySet_New
is not-null.