]> granicus.if.org Git - python/commitdiff
Issue #27587: Move null pointer check earlier in _PyState_AddModule()
authorBerker Peksag <berker.peksag@gmail.com>
Mon, 22 Aug 2016 15:05:56 +0000 (18:05 +0300)
committerBerker Peksag <berker.peksag@gmail.com>
Mon, 22 Aug 2016 15:05:56 +0000 (18:05 +0300)
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.

Misc/NEWS
Python/pystate.c

index 7530624751b6be3a0f4d9b46df17ce8be3d6b8af..730ed96e61bbf90747263a313a2a0013701502fa 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,10 @@ Release date: TBA
 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
   ``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.
index 6d1c6d0a1fae1656399c92a0df703a6bb3e82007..24e20c3e23bada1e830a946fbd0597f08f58cfdc 100644 (file)
@@ -281,14 +281,16 @@ int
 _PyState_AddModule(PyObject* module, struct PyModuleDef* def)
 {
     PyInterpreterState *state;
+    if (!def) {
+        assert(PyErr_Occurred());
+        return -1;
+    }
     if (def->m_slots) {
         PyErr_SetString(PyExc_SystemError,
                         "PyState_AddModule called on module with slots");
         return -1;
     }
     state = GET_INTERP_STATE();
-    if (!def)
-        return -1;
     if (!state->modules_by_index) {
         state->modules_by_index = PyList_New(0);
         if (!state->modules_by_index)