Issue #27587: Move null pointer check earlier in _PyState_AddModule()

This was found by PVS-Studio:

V595 The 'def' pointer was utilized before it was verified
against nullptr. Check lines: 286, 292. pystate.c 286

Initial patch by Christian Heimes.
This commit is contained in:
Berker Peksag 2016-08-22 18:05:56 +03:00
parent 844796530a
commit 4b7b565c58
2 changed files with 8 additions and 2 deletions

View File

@ -10,6 +10,10 @@ Release date: TBA
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #27587: Fix another issue found by PVS-Studio: Null pointer check
after use of 'def' in _PyState_AddModule().
Initial patch by Christian Heimes.
- Issue #27782: Multi-phase extension module import now correctly allows the - Issue #27782: Multi-phase extension module import now correctly allows the
``m_methods`` field to be used to add module level functions to instances ``m_methods`` field to be used to add module level functions to instances
of non-module types returned from ``Py_create_mod``. Patch by Xiang Zhang. of non-module types returned from ``Py_create_mod``. Patch by Xiang Zhang.

View File

@ -281,14 +281,16 @@ int
_PyState_AddModule(PyObject* module, struct PyModuleDef* def) _PyState_AddModule(PyObject* module, struct PyModuleDef* def)
{ {
PyInterpreterState *state; PyInterpreterState *state;
if (!def) {
assert(PyErr_Occurred());
return -1;
}
if (def->m_slots) { if (def->m_slots) {
PyErr_SetString(PyExc_SystemError, PyErr_SetString(PyExc_SystemError,
"PyState_AddModule called on module with slots"); "PyState_AddModule called on module with slots");
return -1; return -1;
} }
state = GET_INTERP_STATE(); state = GET_INTERP_STATE();
if (!def)
return -1;
if (!state->modules_by_index) { if (!state->modules_by_index) {
state->modules_by_index = PyList_New(0); state->modules_by_index = PyList_New(0);
if (!state->modules_by_index) if (!state->modules_by_index)