https://github.com/python/cpython/commit/e9616110aaecfbe5ec479fe6cf10aad6a68c0ccc commit: e9616110aaecfbe5ec479fe6cf10aad6a68c0ccc branch: main author: Eric Snow <ericsnowcurren...@gmail.com> committer: ericsnowcurrently <ericsnowcurren...@gmail.com> date: 2025-05-05T17:25:26-06:00 summary:
gh-132775: Do Not Set __name__ to __main__ With _PyPickle_GetXIData() (gh-133472) This is a follow-up to gh-133107. I realized that we could end up with an infinite recursion if we try to run a function from __main__ in a subinterpreter. files: M Python/crossinterp.c diff --git a/Python/crossinterp.c b/Python/crossinterp.c index a9f9b78562917e..74ce02f1a26401 100644 --- a/Python/crossinterp.c +++ b/Python/crossinterp.c @@ -512,9 +512,12 @@ _unpickle_context_set_module(struct _unpickle_context *ctx, struct sync_module_result res = {0}; struct sync_module_result *cached = NULL; const char *filename = NULL; + const char *run_modname = modname; if (strcmp(modname, "__main__") == 0) { cached = &ctx->main.cached; filename = ctx->main.filename; + // We don't want to trigger "if __name__ == '__main__':". + run_modname = "<fake __main__>"; } else { res.failed = PyExc_NotImplementedError; @@ -533,7 +536,7 @@ _unpickle_context_set_module(struct _unpickle_context *ctx, res.failed = PyExc_NotImplementedError; goto finally; } - res.loaded = runpy_run_path(filename, modname); + res.loaded = runpy_run_path(filename, run_modname); if (res.loaded == NULL) { Py_CLEAR(res.module); res.failed = _PyErr_GetRaisedException(ctx->tstate); _______________________________________________ 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