Patch bug63428.patch for *General Issues Bug #63428
Patch version 2012-11-03 16:14 UTC
Return to Bug #63428 |
Download this patch
Patch Revisions:
Developer: laruence@php.net
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index fba62dd..87f0644 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 8c4b594..7a2cfc8 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 58e5631..2a6fd71 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%}
|