]> granicus.if.org Git - php/commitdiff
Fixed bug #63428 (The behavior of execute() changed)
authorXinchen Hui <laruence@php.net>
Sun, 4 Nov 2012 04:48:35 +0000 (12:48 +0800)
committerXinchen Hui <laruence@php.net>
Sun, 4 Nov 2012 04:48:35 +0000 (12:48 +0800)
Zend/zend_generators.c
Zend/zend_vm_execute.h
Zend/zend_vm_execute.skl

index fba62dd83aacf92fda028cb4b39af97215f4ace8..87f0644e81e5fd0daf319f06265b6826d9881e6e 100644 (file)
@@ -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;
index 8c4b594d0000a268435be33213eecad32e115846..7a2cfc88d90ded6d6c54b193a1a1be2bbfc57424 100644 (file)
@@ -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)
index 58e5631c953c66ee1bbcbb4eab0d452d774fe967..2a6fd71ecb5a4de9746f9d5e705b5e04fa80b50d 100644 (file)
@@ -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%}