Mercurial > cpython-lru_cache-weakref
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 38454:631c207c3692 | 38455:1a23706139ca |
|---|---|
| 661 } | 661 } |
| 662 | 662 |
| 663 /* Parse input from a file and execute it */ | 663 /* Parse input from a file and execute it */ |
| 664 | 664 |
| 665 int | 665 int |
| 666 PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, | 666 PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, |
| 667 PyCompilerFlags *flags) | 667 PyCompilerFlags *flags) |
| 668 { | 668 { |
| 669 if (filename == NULL) | 669 if (filename == NULL) |
| 670 filename = "???"; | 670 filename = "???"; |
| 671 if (Py_FdIsInteractive(fp, filename)) { | 671 if (Py_FdIsInteractive(fp, filename)) { |
| 742 PyErr_Clear(); | 742 PyErr_Clear(); |
| 743 else if (PyString_Check(w)) | 743 else if (PyString_Check(w)) |
| 744 ps2 = PyString_AsString(w); | 744 ps2 = PyString_AsString(w); |
| 745 } | 745 } |
| 746 arena = PyArena_New(); | 746 arena = PyArena_New(); |
| 747 mod = PyParser_ASTFromFile(fp, filename, | 747 mod = PyParser_ASTFromFile(fp, filename, |
| 748 Py_single_input, ps1, ps2, | 748 Py_single_input, ps1, ps2, |
| 749 flags, &errcode, arena); | 749 flags, &errcode, arena); |
| 750 Py_XDECREF(v); | 750 Py_XDECREF(v); |
| 751 Py_XDECREF(w); | 751 Py_XDECREF(w); |
| 752 if (mod == NULL) { | 752 if (mod == NULL) { |
| 1130 } | 1130 } |
| 1131 if (err) { | 1131 if (err) { |
| 1132 /* Don't do anything else */ | 1132 /* Don't do anything else */ |
| 1133 } | 1133 } |
| 1134 else if (PyExceptionClass_Check(exception)) { | 1134 else if (PyExceptionClass_Check(exception)) { |
| 1135 PyObject* moduleName; | |
| 1135 char* className = PyExceptionClass_Name(exception); | 1136 char* className = PyExceptionClass_Name(exception); |
| 1136 char *dot = strrchr(className, '.'); | 1137 if (className != NULL) { |
| 1137 PyObject* moduleName; | 1138 char *dot = strrchr(className, '.'); |
| 1138 if (dot != NULL) | 1139 if (dot != NULL) |
| 1139 className = dot+1; | 1140 className = dot+1; |
| 1141 } | |
| 1142 | |
| 1140 moduleName = PyObject_GetAttrString(exception, "__module__"); | 1143 moduleName = PyObject_GetAttrString(exception, "__module__"); |
| 1141 | |
| 1142 if (moduleName == NULL) | 1144 if (moduleName == NULL) |
| 1143 err = PyFile_WriteString("<unknown>", f); | 1145 err = PyFile_WriteString("<unknown>", f); |
| 1144 else { | 1146 else { |
| 1145 char* modstr = PyString_AsString(moduleName); | 1147 char* modstr = PyString_AsString(moduleName); |
| 1146 if (modstr && strcmp(modstr, "exceptions")) | 1148 if (modstr && strcmp(modstr, "exceptions")) |
| 1182 if (err != 0) | 1184 if (err != 0) |
| 1183 PyErr_Clear(); | 1185 PyErr_Clear(); |
| 1184 } | 1186 } |
| 1185 | 1187 |
| 1186 PyObject * | 1188 PyObject * |
| 1187 PyRun_StringFlags(const char *str, int start, PyObject *globals, | 1189 PyRun_StringFlags(const char *str, int start, PyObject *globals, |
| 1188 PyObject *locals, PyCompilerFlags *flags) | 1190 PyObject *locals, PyCompilerFlags *flags) |
| 1189 { | 1191 { |
| 1190 PyObject *ret = NULL; | 1192 PyObject *ret = NULL; |
| 1191 PyArena *arena = PyArena_New(); | 1193 PyArena *arena = PyArena_New(); |
| 1192 mod_ty mod = PyParser_ASTFromString(str, "<string>", start, flags, | 1194 mod_ty mod = PyParser_ASTFromString(str, "<string>", start, flags, |
| 1229 Py_DECREF(co); | 1231 Py_DECREF(co); |
| 1230 return v; | 1232 return v; |
| 1231 } | 1233 } |
| 1232 | 1234 |
| 1233 static PyObject * | 1235 static PyObject * |
| 1234 run_pyc_file(FILE *fp, const char *filename, PyObject *globals, | 1236 run_pyc_file(FILE *fp, const char *filename, PyObject *globals, |
| 1235 PyObject *locals, PyCompilerFlags *flags) | 1237 PyObject *locals, PyCompilerFlags *flags) |
| 1236 { | 1238 { |
| 1237 PyCodeObject *co; | 1239 PyCodeObject *co; |
| 1238 PyObject *v; | 1240 PyObject *v; |
| 1239 long magic; | 1241 long magic; |
| 1298 return st; | 1300 return st; |
| 1299 } | 1301 } |
| 1300 | 1302 |
| 1301 /* Preferred access to parser is through AST. */ | 1303 /* Preferred access to parser is through AST. */ |
| 1302 mod_ty | 1304 mod_ty |
| 1303 PyParser_ASTFromString(const char *s, const char *filename, int start, | 1305 PyParser_ASTFromString(const char *s, const char *filename, int start, |
| 1304 PyCompilerFlags *flags, PyArena *arena) | 1306 PyCompilerFlags *flags, PyArena *arena) |
| 1305 { | 1307 { |
| 1306 mod_ty mod; | 1308 mod_ty mod; |
| 1307 perrdetail err; | 1309 perrdetail err; |
| 1308 node *n = PyParser_ParseStringFlagsFilename(s, filename, | 1310 node *n = PyParser_ParseStringFlagsFilename(s, filename, |
| 1309 &_PyParser_Grammar, start, &err, | 1311 &_PyParser_Grammar, start, &err, |
| 1310 PARSER_FLAGS(flags)); | 1312 PARSER_FLAGS(flags)); |
| 1311 if (n) { | 1313 if (n) { |
| 1312 mod = PyAST_FromNode(n, flags, filename, arena); | 1314 mod = PyAST_FromNode(n, flags, filename, arena); |
| 1313 PyNode_Free(n); | 1315 PyNode_Free(n); |
| 1314 return mod; | 1316 return mod; |
| 1318 return NULL; | 1320 return NULL; |
| 1319 } | 1321 } |
| 1320 } | 1322 } |
| 1321 | 1323 |
| 1322 mod_ty | 1324 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, |
| 1324 char *ps2, PyCompilerFlags *flags, int *errcode, | 1326 char *ps2, PyCompilerFlags *flags, int *errcode, |
| 1325 PyArena *arena) | 1327 PyArena *arena) |
| 1326 { | 1328 { |
| 1327 mod_ty mod; | 1329 mod_ty mod; |
| 1328 perrdetail err; | 1330 perrdetail err; |
| 1349 perrdetail err; | 1351 perrdetail err; |
| 1350 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar, | 1352 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar, |
| 1351 start, NULL, NULL, &err, flags); | 1353 start, NULL, NULL, &err, flags); |
| 1352 if (n == NULL) | 1354 if (n == NULL) |
| 1353 err_input(&err); | 1355 err_input(&err); |
| 1354 | 1356 |
| 1355 return n; | 1357 return n; |
| 1356 } | 1358 } |
| 1357 | 1359 |
| 1358 /* Simplified interface to parsestring -- return node or set exception */ | 1360 /* Simplified interface to parsestring -- return node or set exception */ |
| 1359 | 1361 |
