Skip to content

Commit 5e9d6cf

Browse files
committed
PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
bug in both: `className` was referenced before being checked for NULL.
1 parent a37722c commit 5e9d6cf

File tree

2 files changed

+23
-18
lines changed

2 files changed

+23
-18
lines changed

Python/errors.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -588,13 +588,16 @@ PyErr_WriteUnraisable(PyObject *obj)
588588
if (f != NULL) {
589589
PyFile_WriteString("Exception ", f);
590590
if (t) {
591-
char* className = PyExceptionClass_Name(t);
592591
PyObject* moduleName;
593-
char *dot = strrchr(className, '.');
594-
if (dot != NULL)
595-
className = dot+1;
596-
moduleName = PyObject_GetAttrString(t, "__module__");
592+
char* className = PyExceptionClass_Name(t);
597593

594+
if (className != NULL) {
595+
char *dot = strrchr(className, '.');
596+
if (dot != NULL)
597+
className = dot+1;
598+
}
599+
600+
moduleName = PyObject_GetAttrString(t, "__module__");
598601
if (moduleName == NULL)
599602
PyFile_WriteString("<unknown>", f);
600603
else {

Python/pythonrun.c

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ initsite(void)
663663
/* Parse input from a file and execute it */
664664

665665
int
666-
PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
666+
PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
667667
PyCompilerFlags *flags)
668668
{
669669
if (filename == NULL)
@@ -744,7 +744,7 @@ PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags
744744
ps2 = PyString_AsString(w);
745745
}
746746
arena = PyArena_New();
747-
mod = PyParser_ASTFromFile(fp, filename,
747+
mod = PyParser_ASTFromFile(fp, filename,
748748
Py_single_input, ps1, ps2,
749749
flags, &errcode, arena);
750750
Py_XDECREF(v);
@@ -1132,13 +1132,15 @@ PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
11321132
/* Don't do anything else */
11331133
}
11341134
else if (PyExceptionClass_Check(exception)) {
1135-
char* className = PyExceptionClass_Name(exception);
1136-
char *dot = strrchr(className, '.');
11371135
PyObject* moduleName;
1138-
if (dot != NULL)
1139-
className = dot+1;
1140-
moduleName = PyObject_GetAttrString(exception, "__module__");
1136+
char* className = PyExceptionClass_Name(exception);
1137+
if (className != NULL) {
1138+
char *dot = strrchr(className, '.');
1139+
if (dot != NULL)
1140+
className = dot+1;
1141+
}
11411142

1143+
moduleName = PyObject_GetAttrString(exception, "__module__");
11421144
if (moduleName == NULL)
11431145
err = PyFile_WriteString("<unknown>", f);
11441146
else {
@@ -1184,7 +1186,7 @@ PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
11841186
}
11851187

11861188
PyObject *
1187-
PyRun_StringFlags(const char *str, int start, PyObject *globals,
1189+
PyRun_StringFlags(const char *str, int start, PyObject *globals,
11881190
PyObject *locals, PyCompilerFlags *flags)
11891191
{
11901192
PyObject *ret = NULL;
@@ -1231,7 +1233,7 @@ run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
12311233
}
12321234

12331235
static PyObject *
1234-
run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
1236+
run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
12351237
PyObject *locals, PyCompilerFlags *flags)
12361238
{
12371239
PyCodeObject *co;
@@ -1300,13 +1302,13 @@ Py_SymtableString(const char *str, const char *filename, int start)
13001302

13011303
/* Preferred access to parser is through AST. */
13021304
mod_ty
1303-
PyParser_ASTFromString(const char *s, const char *filename, int start,
1305+
PyParser_ASTFromString(const char *s, const char *filename, int start,
13041306
PyCompilerFlags *flags, PyArena *arena)
13051307
{
13061308
mod_ty mod;
13071309
perrdetail err;
13081310
node *n = PyParser_ParseStringFlagsFilename(s, filename,
1309-
&_PyParser_Grammar, start, &err,
1311+
&_PyParser_Grammar, start, &err,
13101312
PARSER_FLAGS(flags));
13111313
if (n) {
13121314
mod = PyAST_FromNode(n, flags, filename, arena);
@@ -1320,7 +1322,7 @@ PyParser_ASTFromString(const char *s, const char *filename, int start,
13201322
}
13211323

13221324
mod_ty
1323-
PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1,
1325+
PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1,
13241326
char *ps2, PyCompilerFlags *flags, int *errcode,
13251327
PyArena *arena)
13261328
{
@@ -1351,7 +1353,7 @@ PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int fla
13511353
start, NULL, NULL, &err, flags);
13521354
if (n == NULL)
13531355
err_input(&err);
1354-
1356+
13551357
return n;
13561358
}
13571359

0 commit comments

Comments
 (0)