https://github.com/python/cpython/commit/686996e4d8a09ad5a301488894e3193e9a08a70f
commit: 686996e4d8a09ad5a301488894e3193e9a08a70f
branch: main
author: pengyu lee <[email protected]>
committer: kumaraditya303 <[email protected]>
date: 2026-05-29T15:33:37+05:30
summary:
gh-150454: Fix wrong-interpreter return in import_run_extension error path
(#150455)
files:
M Python/import.c
diff --git a/Python/import.c b/Python/import.c
index 8d57b92925b630..2a8f7bddb98986 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -2168,6 +2168,7 @@ import_run_extension(PyThreadState *tstate,
PyModInitFunction p0,
struct _Py_ext_module_loader_result res;
int rc = _PyImport_RunModInitFunc(p0, info, &res);
+ bool main_error = false;
if (rc < 0) {
/* We discard res.def. */
assert(res.module == NULL);
@@ -2192,7 +2193,8 @@ import_run_extension(PyThreadState *tstate,
PyModInitFunction p0,
// obmalloc, so we create a copy here.
filename = _PyUnicode_Copy(info->filename);
if (filename == NULL) {
- return NULL;
+ main_error = true;
+ goto main_finally;
}
}
else {
@@ -2238,6 +2240,7 @@ import_run_extension(PyThreadState *tstate,
PyModInitFunction p0,
main_tstate, info->path, info->name, def, &singlephase);
if (cached == NULL) {
assert(PyErr_Occurred());
+ main_error = true;
goto main_finally;
}
}
@@ -2253,7 +2256,7 @@ import_run_extension(PyThreadState *tstate,
PyModInitFunction p0,
// gh-144601: The exception object can't be transferred across
// interpreters. Instead, we print out an unraisable exception, and
// then raise a different exception for the calling interpreter.
- if (rc < 0) {
+ if (rc < 0 || main_error) {
assert(PyErr_Occurred());
PyErr_FormatUnraisable("Exception while importing from
subinterpreter");
}
@@ -2262,7 +2265,7 @@ import_run_extension(PyThreadState *tstate,
PyModInitFunction p0,
/* Any module we got from the init function will have to be
* reloaded in the subinterpreter. */
mod = NULL;
- if (rc < 0) {
+ if (rc < 0 || main_error) {
PyErr_SetString(PyExc_ImportError,
"failed to import from subinterpreter due to
exception");
goto error;
@@ -2277,6 +2280,9 @@ import_run_extension(PyThreadState *tstate,
PyModInitFunction p0,
if (rc < 0) {
goto error;
}
+ if (main_error) {
+ goto error;
+ }
if (res.kind == _Py_ext_module_kind_MULTIPHASE) {
assert_multiphase_def(def);
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]