mirror of
https://github.com/python/cpython.git
synced 2025-07-18 00:35:17 +00:00
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
1 changed files with 6 additions and 2 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue