Commit 5e9d6cfb authored by Tim Peters's avatar Tim Peters

PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste

bug in both:  `className` was referenced before being checked for NULL.
parent a37722cc
...@@ -588,13 +588,16 @@ PyErr_WriteUnraisable(PyObject *obj) ...@@ -588,13 +588,16 @@ PyErr_WriteUnraisable(PyObject *obj)
if (f != NULL) { if (f != NULL) {
PyFile_WriteString("Exception ", f); PyFile_WriteString("Exception ", f);
if (t) { if (t) {
char* className = PyExceptionClass_Name(t);
PyObject* moduleName; PyObject* moduleName;
char *dot = strrchr(className, '.'); char* className = PyExceptionClass_Name(t);
if (dot != NULL)
className = dot+1;
moduleName = PyObject_GetAttrString(t, "__module__");
if (className != NULL) {
char *dot = strrchr(className, '.');
if (dot != NULL)
className = dot+1;
}
moduleName = PyObject_GetAttrString(t, "__module__");
if (moduleName == NULL) if (moduleName == NULL)
PyFile_WriteString("<unknown>", f); PyFile_WriteString("<unknown>", f);
else { else {
......
...@@ -663,7 +663,7 @@ initsite(void) ...@@ -663,7 +663,7 @@ initsite(void)
/* Parse input from a file and execute it */ /* Parse input from a file and execute it */
int int
PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
PyCompilerFlags *flags) PyCompilerFlags *flags)
{ {
if (filename == NULL) if (filename == NULL)
...@@ -744,7 +744,7 @@ PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags ...@@ -744,7 +744,7 @@ PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags
ps2 = PyString_AsString(w); ps2 = PyString_AsString(w);
} }
arena = PyArena_New(); arena = PyArena_New();
mod = PyParser_ASTFromFile(fp, filename, mod = PyParser_ASTFromFile(fp, filename,
Py_single_input, ps1, ps2, Py_single_input, ps1, ps2,
flags, &errcode, arena); flags, &errcode, arena);
Py_XDECREF(v); Py_XDECREF(v);
...@@ -1132,13 +1132,15 @@ PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb) ...@@ -1132,13 +1132,15 @@ PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
/* Don't do anything else */ /* Don't do anything else */
} }
else if (PyExceptionClass_Check(exception)) { else if (PyExceptionClass_Check(exception)) {
char* className = PyExceptionClass_Name(exception);
char *dot = strrchr(className, '.');
PyObject* moduleName; PyObject* moduleName;
if (dot != NULL) char* className = PyExceptionClass_Name(exception);
className = dot+1; if (className != NULL) {
moduleName = PyObject_GetAttrString(exception, "__module__"); char *dot = strrchr(className, '.');
if (dot != NULL)
className = dot+1;
}
moduleName = PyObject_GetAttrString(exception, "__module__");
if (moduleName == NULL) if (moduleName == NULL)
err = PyFile_WriteString("<unknown>", f); err = PyFile_WriteString("<unknown>", f);
else { else {
...@@ -1184,7 +1186,7 @@ PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb) ...@@ -1184,7 +1186,7 @@ PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
} }
PyObject * PyObject *
PyRun_StringFlags(const char *str, int start, PyObject *globals, PyRun_StringFlags(const char *str, int start, PyObject *globals,
PyObject *locals, PyCompilerFlags *flags) PyObject *locals, PyCompilerFlags *flags)
{ {
PyObject *ret = NULL; PyObject *ret = NULL;
...@@ -1231,7 +1233,7 @@ run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals, ...@@ -1231,7 +1233,7 @@ run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
} }
static PyObject * 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) PyObject *locals, PyCompilerFlags *flags)
{ {
PyCodeObject *co; PyCodeObject *co;
...@@ -1300,13 +1302,13 @@ Py_SymtableString(const char *str, const char *filename, int start) ...@@ -1300,13 +1302,13 @@ Py_SymtableString(const char *str, const char *filename, int start)
/* Preferred access to parser is through AST. */ /* Preferred access to parser is through AST. */
mod_ty 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) PyCompilerFlags *flags, PyArena *arena)
{ {
mod_ty mod; mod_ty mod;
perrdetail err; perrdetail err;
node *n = PyParser_ParseStringFlagsFilename(s, filename, node *n = PyParser_ParseStringFlagsFilename(s, filename,
&_PyParser_Grammar, start, &err, &_PyParser_Grammar, start, &err,
PARSER_FLAGS(flags)); PARSER_FLAGS(flags));
if (n) { if (n) {
mod = PyAST_FromNode(n, flags, filename, arena); mod = PyAST_FromNode(n, flags, filename, arena);
...@@ -1320,7 +1322,7 @@ PyParser_ASTFromString(const char *s, const char *filename, int start, ...@@ -1320,7 +1322,7 @@ PyParser_ASTFromString(const char *s, const char *filename, int start,
} }
mod_ty 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, char *ps2, PyCompilerFlags *flags, int *errcode,
PyArena *arena) PyArena *arena)
{ {
...@@ -1351,7 +1353,7 @@ PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int fla ...@@ -1351,7 +1353,7 @@ PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int fla
start, NULL, NULL, &err, flags); start, NULL, NULL, &err, flags);
if (n == NULL) if (n == NULL)
err_input(&err); err_input(&err);
return n; return n;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment