From b565c85b9e166cbbc024ce279986b18e96048042 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 27 Nov 2018 19:43:25 +0100 Subject: [PATCH] Improve fix for #76046 Also locate the JMP at the start of the foreach. Patch suggested by Derick. --- Zend/zend_compile.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 9c0893b7739..ee40e9c982d 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -4797,6 +4797,10 @@ void zend_compile_foreach(zend_ast *ast) /* {{{ */ zend_compile_stmt(stmt_ast); + /* Place JMP and FE_FREE on the line where foreach starts. It would be + * better to use the end line, but this information is not available + * currently. */ + CG(zend_lineno) = ast->lineno; zend_emit_jump(opnum_fetch); opline = &CG(active_op_array)->opcodes[opnum_reset]; @@ -4807,7 +4811,6 @@ void zend_compile_foreach(zend_ast *ast) /* {{{ */ zend_end_loop(opnum_fetch, &reset_node); - CG(zend_lineno) = ast->lineno; opline = zend_emit_op(NULL, ZEND_FE_FREE, &reset_node, NULL); } /* }}} */