closes bpo-38124: Fix bounds check in PyState_AddModule. (GH-16007)
The >=, checking whether a module index was in already in the module-by-index list, needed to be strict.
Also, fold nested ifs into one and fix some bad spacing.
diff --git a/Python/pystate.c b/Python/pystate.c
index 02bc903..7dd8b7f 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -684,7 +684,7 @@
if (!state->modules_by_index)
return -1;
}
- while(PyList_GET_SIZE(state->modules_by_index) <= def->m_base.m_index)
+ while (PyList_GET_SIZE(state->modules_by_index) <= def->m_base.m_index)
if (PyList_Append(state->modules_by_index, Py_None) < 0)
return -1;
Py_INCREF(module);
@@ -702,13 +702,11 @@
return -1;
}
index = def->m_base.m_index;
- if (state->modules_by_index) {
- if(PyList_GET_SIZE(state->modules_by_index) >= index) {
- if(module == PyList_GET_ITEM(state->modules_by_index, index)) {
- Py_FatalError("PyState_AddModule: Module already added!");
- return -1;
- }
- }
+ if (state->modules_by_index &&
+ index < PyList_GET_SIZE(state->modules_by_index) &&
+ module == PyList_GET_ITEM(state->modules_by_index, index)) {
+ Py_FatalError("PyState_AddModule: Module already added!");
+ return -1;
}
return _PyState_AddModule(module, def);
}