From: Xinchen Hui Date: Sun, 4 Nov 2012 04:48:35 +0000 (+0800) Subject: Fixed bug #63428 (The behavior of execute() changed) X-Git-Tag: php-5.5.0alpha1~11 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7bcb8780e0ed042888f88c78919b7726be9ea931;p=php Fixed bug #63428 (The behavior of execute() changed) --- diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index fba62dd83a..87f0644e81 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -461,6 +461,10 @@ static zend_function *zend_generator_get_constructor(zval *object TSRMLS_DC) /* void zend_generator_resume(zend_generator *generator TSRMLS_DC) /* {{{ */ { + if (EG(exception)) { + return; + } + /* The generator is already closed, thus can't resume */ if (!generator->execute_data) { return; diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 8c4b594d00..7a2cfc88d9 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -419,10 +419,6 @@ ZEND_API void execute_ex(zend_execute_data *execute_data TSRMLS_DC) - if (EG(exception)) { - return; - } - original_in_execution = EG(in_execution); EG(in_execution) = 1; @@ -459,9 +455,10 @@ ZEND_API void execute_ex(zend_execute_data *execute_data TSRMLS_DC) ZEND_API void execute(zend_op_array *op_array TSRMLS_DC) { - zend_execute_data *execute_data = zend_create_execute_data_from_op_array(op_array, 0 TSRMLS_CC); - - execute_ex(execute_data TSRMLS_CC); + if (EG(exception)) { + return; + } + execute_ex(zend_create_execute_data_from_op_array(op_array, 0 TSRMLS_CC) TSRMLS_CC); } static int ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) diff --git a/Zend/zend_vm_execute.skl b/Zend/zend_vm_execute.skl index 58e5631c95..2a6fd71ecb 100644 --- a/Zend/zend_vm_execute.skl +++ b/Zend/zend_vm_execute.skl @@ -82,10 +82,6 @@ ZEND_API void {%EXECUTOR_NAME%}_ex(zend_execute_data *execute_data TSRMLS_DC) {%INTERNAL_LABELS%} - if (EG(exception)) { - return; - } - original_in_execution = EG(in_execution); EG(in_execution) = 1; @@ -110,9 +106,10 @@ ZEND_API void {%EXECUTOR_NAME%}_ex(zend_execute_data *execute_data TSRMLS_DC) ZEND_API void {%EXECUTOR_NAME%}(zend_op_array *op_array TSRMLS_DC) { - zend_execute_data *execute_data = zend_create_execute_data_from_op_array(op_array, 0 TSRMLS_CC); - - {%EXECUTOR_NAME%}_ex(execute_data TSRMLS_CC); + if (EG(exception)) { + return; + } + {%EXECUTOR_NAME%}_ex(zend_create_execute_data_from_op_array(op_array, 0 TSRMLS_CC) TSRMLS_CC); } {%EXTERNAL_EXECUTOR%}