Skip to content

Commit

Permalink
pythongh-117953: Imply Single-phase Init if the Init Function Fails (p…
Browse files Browse the repository at this point in the history
…ythongh-118684)

This ensures the kind is always either _Py_ext_module_kind_SINGLEPHASE or _Py_ext_module_kind_MULTIPHASE.
  • Loading branch information
ericsnowcurrently authored and SonicField committed May 8, 2024
1 parent 0d76d9c commit 69baf02
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions Python/importdl.c
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,11 @@ _PyImport_RunModInitFunc(PyModInitFunction p0,
/* Validate the result (and populate "res". */

if (m == NULL) {
/* The init func for multi-phase init modules is expected
* to return a PyModuleDef after calling PyModuleDef_Init().
* That function never raises an exception nor returns NULL,
* so at this point it must be a single-phase init modules. */
res.kind = _Py_ext_module_kind_SINGLEPHASE;
if (PyErr_Occurred()) {
_Py_ext_module_loader_result_set_error(
&res, _Py_ext_module_loader_result_EXCEPTION);
Expand All @@ -436,6 +441,8 @@ _PyImport_RunModInitFunc(PyModInitFunction p0,
}
goto error;
} else if (PyErr_Occurred()) {
/* Likewise, we infer that this is a single-phase init module. */
res.kind = _Py_ext_module_kind_SINGLEPHASE;
_Py_ext_module_loader_result_set_error(
&res, _Py_ext_module_loader_result_ERR_UNREPORTED_EXC);
/* We would probably be correct to decref m here,
Expand Down

0 comments on commit 69baf02

Please sign in to comment.