mirror of https://github.com/python/cpython
PyErr_GivenExceptionMatches(): Check for err==NULL and exc==NULL and
return 0 (exceptions don't match). This means that if an ImportError is raised because exceptions.py can't be imported, the interpreter will exit "cleanly" with an error message instead of just core dumping. PyErr_SetFromErrnoWithFilename(), PyErr_SetFromWindowsErrWithFilename(): Don't test on Py_UseClassExceptionsFlag.
This commit is contained in:
parent
48719d3d1f
commit
fa5c315afa
|
@ -125,6 +125,10 @@ int
|
|||
PyErr_GivenExceptionMatches(err, exc)
|
||||
PyObject *err, *exc;
|
||||
{
|
||||
if (err == NULL || exc == NULL) {
|
||||
/* maybe caused by "import exceptions" that failed early on */
|
||||
return 0;
|
||||
}
|
||||
if (PyTuple_Check(exc)) {
|
||||
int i, n;
|
||||
n = PyTuple_Size(exc);
|
||||
|
@ -331,7 +335,7 @@ PyErr_SetFromErrnoWithFilename(exc, filename)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
if (filename != NULL && Py_UseClassExceptionsFlag)
|
||||
if (filename != NULL)
|
||||
v = Py_BuildValue("(iss)", i, s, filename);
|
||||
else
|
||||
v = Py_BuildValue("(is)", i, s);
|
||||
|
@ -379,7 +383,7 @@ PyObject *PyErr_SetFromWindowsErrWithFilename(
|
|||
/* remove trailing cr/lf and dots */
|
||||
while (len > 0 && (s[len-1] <= ' ' || s[len-1] == '.'))
|
||||
s[--len] = '\0';
|
||||
if (filename != NULL && Py_UseClassExceptionsFlag)
|
||||
if (filename != NULL)
|
||||
v = Py_BuildValue("(iss)", err, s, filename);
|
||||
else
|
||||
v = Py_BuildValue("(is)", err, s);
|
||||
|
|
Loading…
Reference in New Issue