In PyFrame_New(), don't set extras to something derived from code
before code has been checked for validity. Discovered by Vladimir
Marangozov.
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index a98d68e..5d85445 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -150,7 +150,7 @@
static PyObject *builtin_object;
PyFrameObject *f;
PyObject *builtins;
- int extras = code->co_stacksize + code->co_nlocals;
+ int extras;
if (builtin_object == NULL) {
builtin_object = PyString_InternFromString("__builtins__");
@@ -164,6 +164,7 @@
PyErr_BadInternalCall();
return NULL;
}
+ extras = code->co_stacksize + code->co_nlocals;
if (back == NULL || back->f_globals != globals) {
builtins = PyDict_GetItem(globals, builtin_object);
if (builtins != NULL && PyModule_Check(builtins))