]> granicus.if.org Git - python/commitdiff
PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
authorTim Peters <tim.peters@gmail.com>
Sun, 28 May 2006 10:41:29 +0000 (10:41 +0000)
committerTim Peters <tim.peters@gmail.com>
Sun, 28 May 2006 10:41:29 +0000 (10:41 +0000)
bug in both:  `className` was referenced before being checked for NULL.

Python/errors.c
Python/pythonrun.c

index f7a1c08f548956aeb3890d67226e7c97e4ea26af..a40f073788b7c722fd712b1ce7bb01371dcfa74f 100644 (file)
@@ -588,13 +588,16 @@ PyErr_WriteUnraisable(PyObject *obj)
        if (f != NULL) {
                PyFile_WriteString("Exception ", f);
                if (t) {
-                       char* className = PyExceptionClass_Name(t);
                        PyObject* moduleName;
-                       char *dot = strrchr(className, '.');
-                       if (dot != NULL)
-                               className = dot+1;
-                       moduleName = PyObject_GetAttrString(t, "__module__");
+                       char* className = PyExceptionClass_Name(t);
 
+                       if (className != NULL) {
+                               char *dot = strrchr(className, '.');
+                               if (dot != NULL)
+                                       className = dot+1;
+                       }
+
+                       moduleName = PyObject_GetAttrString(t, "__module__");
                        if (moduleName == NULL)
                                PyFile_WriteString("<unknown>", f);
                        else {
index 6f3ff6fe033aa592ce9c569aa207f1a14212022f..3a282e7867e3ebd814836560066398e76f173f23 100644 (file)
@@ -663,7 +663,7 @@ initsite(void)
 /* Parse input from a file and execute it */
 
 int
-PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, 
+PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
                     PyCompilerFlags *flags)
 {
        if (filename == NULL)
@@ -744,7 +744,7 @@ PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags
                        ps2 = PyString_AsString(w);
        }
        arena = PyArena_New();
-       mod = PyParser_ASTFromFile(fp, filename, 
+       mod = PyParser_ASTFromFile(fp, filename,
                                   Py_single_input, ps1, ps2,
                                   flags, &errcode, arena);
        Py_XDECREF(v);
@@ -1132,13 +1132,15 @@ PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
                        /* Don't do anything else */
                }
                else if (PyExceptionClass_Check(exception)) {
-                       char* className = PyExceptionClass_Name(exception);
-                       char *dot = strrchr(className, '.');
                        PyObject* moduleName;
-                       if (dot != NULL)
-                               className = dot+1;
-                       moduleName = PyObject_GetAttrString(exception, "__module__");
+                       char* className = PyExceptionClass_Name(exception);
+                       if (className != NULL) {
+                               char *dot = strrchr(className, '.');
+                               if (dot != NULL)
+                                       className = dot+1;
+                       }
 
+                       moduleName = PyObject_GetAttrString(exception, "__module__");
                        if (moduleName == NULL)
                                err = PyFile_WriteString("<unknown>", f);
                        else {
@@ -1184,7 +1186,7 @@ PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
 }
 
 PyObject *
-PyRun_StringFlags(const char *str, int start, PyObject *globals, 
+PyRun_StringFlags(const char *str, int start, PyObject *globals,
                  PyObject *locals, PyCompilerFlags *flags)
 {
        PyObject *ret = NULL;
@@ -1231,7 +1233,7 @@ run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
 }
 
 static PyObject *
-run_pyc_file(FILE *fp, const char *filename, PyObject *globals, 
+run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
             PyObject *locals, PyCompilerFlags *flags)
 {
        PyCodeObject *co;
@@ -1300,13 +1302,13 @@ Py_SymtableString(const char *str, const char *filename, int start)
 
 /* Preferred access to parser is through AST. */
 mod_ty
-PyParser_ASTFromString(const char *s, const char *filename, int start, 
+PyParser_ASTFromString(const char *s, const char *filename, int start,
                       PyCompilerFlags *flags, PyArena *arena)
 {
        mod_ty mod;
        perrdetail err;
        node *n = PyParser_ParseStringFlagsFilename(s, filename,
-                                       &_PyParser_Grammar, start, &err, 
+                                       &_PyParser_Grammar, start, &err,
                                        PARSER_FLAGS(flags));
        if (n) {
                mod = PyAST_FromNode(n, flags, filename, arena);
@@ -1320,7 +1322,7 @@ PyParser_ASTFromString(const char *s, const char *filename, int start,
 }
 
 mod_ty
-PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1, 
+PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1,
                     char *ps2, PyCompilerFlags *flags, int *errcode,
                     PyArena *arena)
 {
@@ -1351,7 +1353,7 @@ PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int fla
                                          start, NULL, NULL, &err, flags);
        if (n == NULL)
                err_input(&err);
-               
+
        return n;
 }