mirror of https://github.com/python/cpython
PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
bug in both: `className` was referenced before being checked for NULL.
This commit is contained in:
parent
a37722cc42
commit
5e9d6cfbda
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue