https://github.com/python/cpython/commit/1a23716d4ba6c6dadd76a3662db580f451f660e3
commit: 1a23716d4ba6c6dadd76a3662db580f451f660e3
branch: main
author: Eric Snow <ericsnowcurren...@gmail.com>
committer: ericsnowcurrently <ericsnowcurren...@gmail.com>
date: 2024-05-06T21:16:22-06:00
summary:

gh-117953: Imply Single-phase Init if the Init Function Fails (gh-118684)

This ensures the kind is always either _Py_ext_module_kind_SINGLEPHASE or 
_Py_ext_module_kind_MULTIPHASE.

files:
M Python/importdl.c

diff --git a/Python/importdl.c b/Python/importdl.c
index 38f56db4b4cc96..7c42d37283c495 100644
--- a/Python/importdl.c
+++ b/Python/importdl.c
@@ -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);
@@ -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,

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to