@@ -3451,36 +3451,35 @@ static PyObject *
34513451listiter_reduce_general (void * _it , int forward )
34523452{
34533453 PyObject * list ;
3454+ PyObject * iter ;
34543455
34553456 /* _PyEval_GetBuiltin can invoke arbitrary code,
34563457 * call must be before access of iterator pointers.
34573458 * see issue #101765 */
34583459
34593460 /* the objects are not the same, index is of different types! */
34603461 if (forward ) {
3461- PyObject * iter = _PyEval_GetBuiltin (& _Py_ID (iter ));
3462+ iter = _PyEval_GetBuiltin (& _Py_ID (iter ));
34623463 if (!iter ) {
34633464 return NULL ;
34643465 }
34653466 listiterobject * it = (listiterobject * )_it ;
34663467 if (it -> it_seq ) {
34673468 return Py_BuildValue ("N(O)n" , iter , it -> it_seq , it -> it_index );
34683469 }
3469- Py_DECREF (iter );
34703470 } else {
3471- PyObject * reversed = _PyEval_GetBuiltin (& _Py_ID (reversed ));
3472- if (!reversed ) {
3471+ iter = _PyEval_GetBuiltin (& _Py_ID (reversed ));
3472+ if (!iter ) {
34733473 return NULL ;
34743474 }
34753475 listreviterobject * it = (listreviterobject * )_it ;
34763476 if (it -> it_seq ) {
3477- return Py_BuildValue ("N(O)n" , reversed , it -> it_seq , it -> it_index );
3477+ return Py_BuildValue ("N(O)n" , iter , it -> it_seq , it -> it_index );
34783478 }
3479- Py_DECREF (reversed );
34803479 }
34813480 /* empty iterator, create an empty list */
34823481 list = PyList_New (0 );
34833482 if (list == NULL )
34843483 return NULL ;
3485- return Py_BuildValue ("N(N)" , _PyEval_GetBuiltin ( & _Py_ID ( iter )) , list );
3484+ return Py_BuildValue ("N(N)" , iter , list );
34863485}
0 commit comments