[3.10] bpo-46009: Do not exhaust generator when send() method raises (GH-29986). (GH-29988)
* [3.10] bpo-46009: Do not exhaust generator when send() method raises (GH-29986).
(cherry picked from commit 69806b9516dbe092381f3ef884c7c64bb9b8414a)
Co-authored-by: Mark Shannon <mark@hotpy.org>
* Rename variable after cherry-pick.
* Add NULL check.
diff --git a/Python/ceval.c b/Python/ceval.c
index 624baf5..8ad1713 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2649,25 +2649,9 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag)
case TARGET(GEN_START): {
PyObject *none = POP();
+ assert(none == Py_None);
+ assert(oparg < 3);
Py_DECREF(none);
- if (!Py_IsNone(none)) {
- if (oparg > 2) {
- _PyErr_SetString(tstate, PyExc_SystemError,
- "Illegal kind for GEN_START");
- }
- else {
- static const char *gen_kind[3] = {
- "generator",
- "coroutine",
- "async generator"
- };
- _PyErr_Format(tstate, PyExc_TypeError,
- "can't send non-None value to a "
- "just-started %s",
- gen_kind[oparg]);
- }
- goto error;
- }
DISPATCH();
}