[3.7] bpo-33041: Add missed error checks when compile "async for" (GH… · python/cpython@d082634 (original) (raw)
`@@ -2189,7 +2189,7 @@ compiler_async_for(struct compiler *c, stmt_ty s)
`
2189
2189
`_Py_IDENTIFIER(StopAsyncIteration);
`
2190
2190
``
2191
2191
`basicblock *try, *except, *end, *after_try, *try_cleanup,
`
2192
``
`-
*after_loop, *after_loop_else;
`
``
2192
`+
*after_loop_else;
`
2193
2193
``
2194
2194
`PyObject *stop_aiter_error = _PyUnicode_FromId(&PyId_StopAsyncIteration);
`
2195
2195
`if (stop_aiter_error == NULL) {
`
`@@ -2201,14 +2201,14 @@ compiler_async_for(struct compiler *c, stmt_ty s)
`
2201
2201
`end = compiler_new_block(c);
`
2202
2202
`after_try = compiler_new_block(c);
`
2203
2203
`try_cleanup = compiler_new_block(c);
`
2204
``
`-
after_loop = compiler_new_block(c);
`
2205
2204
`after_loop_else = compiler_new_block(c);
`
2206
2205
``
2207
2206
`if (try == NULL || except == NULL || end == NULL
`
2208
``
`-
|| after_try == NULL || try_cleanup == NULL)
`
``
2207
`+
|| after_try == NULL || try_cleanup == NULL
`
``
2208
`+
|| after_loop_else == NULL)
`
2209
2209
`return 0;
`
2210
2210
``
2211
``
`-
ADDOP_JREL(c, SETUP_LOOP, after_loop);
`
``
2211
`+
ADDOP_JREL(c, SETUP_LOOP, end);
`
2212
2212
`if (!compiler_push_fblock(c, LOOP, try))
`
2213
2213
`return 0;
`
2214
2214
``
`@@ -2257,9 +2257,6 @@ compiler_async_for(struct compiler *c, stmt_ty s)
`
2257
2257
`ADDOP(c, POP_BLOCK); /* for SETUP_LOOP */
`
2258
2258
`compiler_pop_fblock(c, LOOP, try);
`
2259
2259
``
2260
``
`-
compiler_use_next_block(c, after_loop);
`
2261
``
`-
ADDOP_JABS(c, JUMP_ABSOLUTE, end);
`
2262
``
-
2263
2260
`compiler_use_next_block(c, after_loop_else);
`
2264
2261
`VISIT_SEQ(c, stmt, s->v.For.orelse);
`
2265
2262
``
`@@ -3753,7 +3750,7 @@ compiler_async_comprehension_generator(struct compiler *c,
`
3753
3750
`_Py_IDENTIFIER(StopAsyncIteration);
`
3754
3751
``
3755
3752
`comprehension_ty gen;
`
3756
``
`-
basicblock *anchor, *skip, *if_cleanup, *try,
`
``
3753
`+
basicblock *anchor, *if_cleanup, *try,
`
3757
3754
`*after_try, *except, *try_cleanup;
`
3758
3755
`Py_ssize_t i, n;
`
3759
3756
``
`@@ -3766,13 +3763,12 @@ compiler_async_comprehension_generator(struct compiler *c,
`
3766
3763
`after_try = compiler_new_block(c);
`
3767
3764
`try_cleanup = compiler_new_block(c);
`
3768
3765
`except = compiler_new_block(c);
`
3769
``
`-
skip = compiler_new_block(c);
`
3770
3766
`if_cleanup = compiler_new_block(c);
`
3771
3767
`anchor = compiler_new_block(c);
`
3772
3768
``
3773
``
`-
if (skip == NULL || if_cleanup == NULL || anchor == NULL ||
`
``
3769
`+
if (if_cleanup == NULL || anchor == NULL ||
`
3774
3770
`try == NULL || after_try == NULL ||
`
3775
``
`-
except == NULL || after_try == NULL) {
`
``
3771
`+
except == NULL || try_cleanup == NULL) {
`
3776
3772
`return 0;
`
3777
3773
` }
`
3778
3774
``
`@@ -3866,8 +3862,6 @@ compiler_async_comprehension_generator(struct compiler *c,
`
3866
3862
`default:
`
3867
3863
`return 0;
`
3868
3864
` }
`
3869
``
-
3870
``
`-
compiler_use_next_block(c, skip);
`
3871
3865
` }
`
3872
3866
`compiler_use_next_block(c, if_cleanup);
`
3873
3867
`ADDOP_JABS(c, JUMP_ABSOLUTE, try);
`