mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt
(SIGINT). If an error occurs while importing the site module, the error is printed and Python exits. Initialize the GIL before importing the site module.
This commit is contained in:
		
							parent
							
								
									e9e07bf5c9
								
							
						
					
					
						commit
						6664426d7c
					
				
					 6 changed files with 48 additions and 23 deletions
				
			
		| 
						 | 
				
			
			@ -248,14 +248,15 @@ Py_InitializeEx(int install_sigs)
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	initmain(); /* Module __main__ */
 | 
			
		||||
	if (!Py_NoSiteFlag)
 | 
			
		||||
		initsite(); /* Module site */
 | 
			
		||||
 | 
			
		||||
	/* auto-thread-state API, if available */
 | 
			
		||||
#ifdef WITH_THREAD
 | 
			
		||||
	_PyGILState_Init(interp, tstate);
 | 
			
		||||
#endif /* WITH_THREAD */
 | 
			
		||||
 | 
			
		||||
	if (!Py_NoSiteFlag)
 | 
			
		||||
		initsite(); /* Module site */
 | 
			
		||||
 | 
			
		||||
	if ((p = Py_GETENV("PYTHONIOENCODING")) && *p != '\0') {
 | 
			
		||||
		p = icodeset = codeset = strdup(p);
 | 
			
		||||
		free_codeset = 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -284,8 +285,13 @@ Py_InitializeEx(int install_sigs)
 | 
			
		|||
				loc_codeset = strdup(loc_codeset);
 | 
			
		||||
				Py_DECREF(enc);
 | 
			
		||||
			} else {
 | 
			
		||||
				loc_codeset = NULL;
 | 
			
		||||
				PyErr_Clear();
 | 
			
		||||
				if (PyErr_ExceptionMatches(PyExc_LookupError)) {
 | 
			
		||||
					PyErr_Clear();
 | 
			
		||||
					loc_codeset = NULL;
 | 
			
		||||
				} else {
 | 
			
		||||
					PyErr_Print();
 | 
			
		||||
					exit(1);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		} else
 | 
			
		||||
			loc_codeset = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -704,20 +710,12 @@ initmain(void)
 | 
			
		|||
static void
 | 
			
		||||
initsite(void)
 | 
			
		||||
{
 | 
			
		||||
	PyObject *m, *f;
 | 
			
		||||
	PyObject *m;
 | 
			
		||||
	m = PyImport_ImportModule("site");
 | 
			
		||||
	if (m == NULL) {
 | 
			
		||||
		f = PySys_GetObject("stderr");
 | 
			
		||||
		if (Py_VerboseFlag) {
 | 
			
		||||
			PyFile_WriteString(
 | 
			
		||||
				"'import site' failed; traceback:\n", f);
 | 
			
		||||
			PyErr_Print();
 | 
			
		||||
		}
 | 
			
		||||
		else {
 | 
			
		||||
			PyFile_WriteString(
 | 
			
		||||
			  "'import site' failed; use -v for traceback\n", f);
 | 
			
		||||
			PyErr_Clear();
 | 
			
		||||
		}
 | 
			
		||||
		PyErr_Print();
 | 
			
		||||
		Py_Finalize();
 | 
			
		||||
		exit(1);
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		Py_DECREF(m);
 | 
			
		||||
| 
						 | 
				
			
			@ -1546,6 +1544,8 @@ err_input(perrdetail *err)
 | 
			
		|||
	char *msg = NULL;
 | 
			
		||||
	errtype = PyExc_SyntaxError;
 | 
			
		||||
	switch (err->error) {
 | 
			
		||||
	case E_ERROR:
 | 
			
		||||
		return;
 | 
			
		||||
	case E_SYNTAX:
 | 
			
		||||
		errtype = PyExc_IndentationError;
 | 
			
		||||
		if (err->expected == INDENT)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue