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:
Barry Warsaw 2000-05-02 19:27:51 +00:00
parent 48719d3d1f
commit fa5c315afa
1 changed files with 6 additions and 2 deletions

View File

@ -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);