From 03e64d7c0bf1c9576eb232641b5a75d035e3c533 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Wed, 17 Apr 2024 13:44:37 -0600 Subject: [PATCH] Imply singlephase if the init func fails. --- Python/importdl.c | 7 +++++++ 1 file changed, 7 insertions(+) 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,