mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	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
					
				
					 1 changed files with 4 additions and 1 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Eric Snow
						Eric Snow