aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-05-13 01:32:36 +0200
committerVictor Stinner <victor.stinner@gmail.com>2014-05-13 01:32:36 +0200
commit1c6970fac994be2b1f9e3415e09c07ff01657563 (patch)
tree3f9cf62986cec2c97af62133482babb903e3c57f
parentb0539b27d9a195b78a5713cc3d4aa98ea07dbc53 (diff)
downloadcpython3-1c6970fac994be2b1f9e3415e09c07ff01657563.tar.gz
Issue #21418: Fix a crash in the builtin function super() when called without
argument and without current frame (ex: embedded Python).
-rw-r--r--Misc/NEWS3
-rw-r--r--Objects/typeobject.c11
2 files changed, 12 insertions, 2 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index cb4fffbe4d..0b00ecdbad 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@ Release date: TBA
Core and Builtins
-----------------
+- Issue #21418: Fix a crash in the builtin function super() when called without
+ argument and without current frame (ex: embedded Python).
+
- Issue #21425: Fix flushing of standard streams in the interactive
interpreter.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 7f59d5da40..ba106a139a 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -6919,9 +6919,16 @@ super_init(PyObject *self, PyObject *args, PyObject *kwds)
if (type == NULL) {
/* Call super(), without args -- fill in from __class__
and first local variable on the stack. */
- PyFrameObject *f = PyThreadState_GET()->frame;
- PyCodeObject *co = f->f_code;
+ PyFrameObject *f;
+ PyCodeObject *co;
Py_ssize_t i, n;
+ f = PyThreadState_GET()->frame;
+ if (f == NULL) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "super(): no current frame");
+ return -1;
+ }
+ co = f->f_code;
if (co == NULL) {
PyErr_SetString(PyExc_RuntimeError,
"super(): no code object");