diff Python/pythonrun.c @ 38455:1a23706139ca legacy-trunk

PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste bug in both: `className` was referenced before being checked for NULL.
author Tim Peters <tim.peters@gmail.com>
date Sun, 28 May 2006 10:41:29 +0000
parents 4c0823f0a0a1
children 42808526511c
line wrap: on
line diff
--- a/Python/pythonrun.c	Sun May 28 01:52:38 2006 +0000
+++ b/Python/pythonrun.c	Sun May 28 10:41:29 2006 +0000
@@ -663,7 +663,7 @@
 /* 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 @@
 			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 @@
 			/* Don't do anything else */
 		}
 		else if (PyExceptionClass_Check(exception)) {
+			PyObject* moduleName;
 			char* className = PyExceptionClass_Name(exception);
-			char *dot = strrchr(className, '.');
-			PyObject* moduleName;
-			if (dot != NULL)
-				className = dot+1;
+			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 @@
 }
 
 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 @@
 }
 
 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 @@
 
 /* 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 @@
 }
 
 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 @@
 					  start, NULL, NULL, &err, flags);
 	if (n == NULL)
 		err_input(&err);
-		
+
 	return n;
 }