summaryrefslogtreecommitdiffstats
path: root/Python/pythonrun.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/pythonrun.c')
-rw-r--r--Python/pythonrun.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 2970248..31213ae 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -1275,17 +1275,20 @@ run_eval_code_obj(PyThreadState *tstate, PyCodeObject *co, PyObject *globals, Py
_PyRuntime.signals.unhandled_keyboard_interrupt = 0;
/* Set globals['__builtins__'] if it doesn't exist */
- if (globals != NULL) {
- int has_builtins = PyDict_ContainsString(globals, "__builtins__");
- if (has_builtins < 0) {
+ if (!globals || !PyDict_Check(globals)) {
+ PyErr_SetString(PyExc_SystemError, "globals must be a real dict");
+ return NULL;
+ }
+ int has_builtins = PyDict_ContainsString(globals, "__builtins__");
+ if (has_builtins < 0) {
+ return NULL;
+ }
+ if (!has_builtins) {
+ if (PyDict_SetItemString(globals, "__builtins__",
+ tstate->interp->builtins) < 0)
+ {
return NULL;
}
- if (!has_builtins) {
- if (PyDict_SetItemString(globals, "__builtins__",
- tstate->interp->builtins) < 0) {
- return NULL;
- }
- }
}
v = PyEval_EvalCode((PyObject*)co, globals, locals);