From e9616110aaecfbe5ec479fe6cf10aad6a68c0ccc Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Mon, 5 May 2025 17:25:26 -0600 Subject: 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. --- Python/crossinterp.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Python/crossinterp.c') diff --git a/Python/crossinterp.c b/Python/crossinterp.c index a9f9b785629..74ce02f1a26 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 = ""; } 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); -- cgit v1.2.3