@@ -3155,7 +3155,14 @@ dummy_func(
31553155 replaced op (_FOR_ITER , (iter -- iter , next )) {
31563156 /* before: [iter]; after: [iter, iter()] *or* [] (and jump over END_FOR.) */
31573157 PyObject * iter_o = PyStackRef_AsPyObjectBorrow (iter );
3158- PyObject * next_o = (* Py_TYPE (iter_o )-> tp_iternext )(iter_o );
3158+ iternextfunc func = Py_TYPE (iter_o )-> tp_iternext ;
3159+ if (func == NULL ) {
3160+ _PyErr_Format (tstate , PyExc_TypeError ,
3161+ "'%.100s' object is not an iterator" ,
3162+ Py_TYPE (iter_o )-> tp_name );
3163+ ERROR_NO_POP ();
3164+ }
3165+ PyObject * next_o = func (iter_o );
31593166 if (next_o == NULL ) {
31603167 if (_PyErr_Occurred (tstate )) {
31613168 int matches = _PyErr_ExceptionMatches (tstate , PyExc_StopIteration );
@@ -3179,7 +3186,14 @@ dummy_func(
31793186 op (_FOR_ITER_TIER_TWO , (iter -- iter , next )) {
31803187 /* before: [iter]; after: [iter, iter()] *or* [] (and jump over END_FOR.) */
31813188 PyObject * iter_o = PyStackRef_AsPyObjectBorrow (iter );
3182- PyObject * next_o = (* Py_TYPE (iter_o )-> tp_iternext )(iter_o );
3189+ iternextfunc func = Py_TYPE (iter_o )-> tp_iternext ;
3190+ if (func == NULL ) {
3191+ _PyErr_Format (tstate , PyExc_TypeError ,
3192+ "'%.100s' object is not an iterator" ,
3193+ Py_TYPE (iter_o )-> tp_name );
3194+ ERROR_NO_POP ();
3195+ }
3196+ PyObject * next_o = func (iter_o );
31833197 if (next_o == NULL ) {
31843198 if (_PyErr_Occurred (tstate )) {
31853199 int matches = _PyErr_ExceptionMatches (tstate , PyExc_StopIteration );
@@ -3202,7 +3216,14 @@ dummy_func(
32023216
32033217 inst (INSTRUMENTED_FOR_ITER , (unused /1 , iter -- iter , next )) {
32043218 PyObject * iter_o = PyStackRef_AsPyObjectBorrow (iter );
3205- PyObject * next_o = (* Py_TYPE (iter_o )-> tp_iternext )(iter_o );
3219+ iternextfunc func = Py_TYPE (iter_o )-> tp_iternext ;
3220+ if (func == NULL ) {
3221+ _PyErr_Format (tstate , PyExc_TypeError ,
3222+ "'%.100s' object is not an iterator" ,
3223+ Py_TYPE (iter_o )-> tp_name );
3224+ ERROR_NO_POP ();
3225+ }
3226+ PyObject * next_o = func (iter_o );
32063227 if (next_o != NULL ) {
32073228 next = PyStackRef_FromPyObjectSteal (next_o );
32083229 INSTRUMENTED_JUMP (this_instr , next_instr , PY_MONITORING_EVENT_BRANCH_LEFT );
0 commit comments