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

Reply via email to