mirror of https://github.com/python/cpython.git
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.
This commit is contained in:
parent
60cdd800d9
commit
e9616110aa
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue