]> granicus.if.org Git - python/commitdiff
PyErr_GivenExceptionMatches(): Check for err==NULL and exc==NULL and
authorBarry Warsaw <barry@python.org>
Tue, 2 May 2000 19:27:51 +0000 (19:27 +0000)
committerBarry Warsaw <barry@python.org>
Tue, 2 May 2000 19:27:51 +0000 (19:27 +0000)
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.

Python/errors.c

index ebce5ddbb338a932b65d6d7e3df9300fcfb00529..d05a21d5ba389e1c8c58d2d9065738a09ac4aa3f 100644 (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);