Commit 6664426d authored by Victor Stinner's avatar Victor Stinner

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.
parent e9e07bf5
......@@ -489,6 +489,12 @@ def execsitecustomize():
import sitecustomize
except ImportError:
pass
except Exception:
if sys.flags.verbose:
sys.excepthook(*sys.exc_info())
else:
print >>sys.stderr, \
"'import sitecustomize' failed; use -v for traceback"
def execusercustomize():
......@@ -497,6 +503,12 @@ def execusercustomize():
import usercustomize
except ImportError:
pass
except Exception:
if sys.flags.verbose:
sys.excepthook(*sys.exc_info())
else:
print>>sys.stderr, \
"'import sitecustomize' failed; use -v for traceback"
def main():
......
......@@ -12,6 +12,11 @@ What's New in Python 2.7 beta 1?
Core and Builtins
-----------------
- 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.
Library
-------
......
......@@ -573,10 +573,16 @@ Py_Main(int argc, char **argv)
}
if (sts==-1) {
sts = PyRun_AnyFileExFlags(
fp,
filename == NULL ? "<stdin>" : filename,
filename != NULL, &cf) != 0;
/* call pending calls like signal handlers (SIGINT) */
if (Py_MakePendingCalls() == -1) {
PyErr_Print();
sts = 1;
} else {
sts = PyRun_AnyFileExFlags(
fp,
filename == NULL ? "<stdin>" : filename,
filename != NULL, &cf) != 0;
}
}
}
......
......@@ -817,8 +817,12 @@ error_nomem:
return -1;
error_clear:
/* Fallback to iso-8859-1: for backward compatibility */
Py_DECREF(enc);
if (!PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) {
tok->done = E_ERROR;
return -1;
}
/* Fallback to iso-8859-1: for backward compatibility */
PyErr_Clear();
return 0;
}
......
......@@ -2748,8 +2748,6 @@ PyImport_Import(PyObject *module_name)
}
else {
/* No globals -- use standard builtins, and fake globals */
PyErr_Clear();
builtins = PyImport_ImportModuleLevel("__builtin__",
NULL, NULL, NULL, 0);
if (builtins == NULL)
......
......@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment