com php-src: Fix include/eval with custom zend_execute: Z end/zend_vm_def.h Zend/zend_vm_execute.h
| From: | Dmitry Stogov | Date: | Fri, 18 Apr 2014 11:44:19 +0000 |
| Subject: | com php-src: Fix include/eval with custom zend_execute: Z end/zend_vm_def.h Zend/zend_vm_execute.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-77348@lists.php.net to get a copy of this message | ||
Commit: ead8a6636d5f3fc01397addfcbd87b56e79f5b89
Author: Nikita Popov <nikic@php.net> Fri, 18 Apr 2014 13:44:19 +0200
Parents: 8a14276701d946f0ade280e67f748cf028273b90
Branches: phpng
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=ead8a6636d5f3fc01397addfcbd87b56e79f5b89
Log:
Fix include/eval with custom zend_execute
Changed paths:
M Zend/zend_vm_def.h
M Zend/zend_vm_execute.h
Diff:
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index aa8b2a5..b17dbbf 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -1751,8 +1751,9 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
zend_bool nested = EX(nested);
zend_op_array *op_array = EX(op_array);
- if ((nested && EX(prev_execute_data)->opline->opcode == ZEND_INCLUDE_OR_EVAL) ||
- EG(active_symbol_table) == &EG(symbol_table)) {
+ if ((EX(prev_execute_data) && EX(prev_execute_data)->opline
+ && EX(prev_execute_data)->opline->opcode == ZEND_INCLUDE_OR_EVAL)
+ || EG(active_symbol_table) == &EG(symbol_table)) {
zend_detach_symbol_table(TSRMLS_C);
}
@@ -3900,6 +3901,8 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMP|VAR|CV, ANY)
zend_execute(new_op_array, return_value TSRMLS_CC);
}
+ zend_attach_symbol_table(TSRMLS_C);
+
EX(function_state).function = (zend_function *) EX(op_array);
EG(opline_ptr) = &EX(opline);
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 24e6ef1..4f4df9d 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -386,8 +386,9 @@ static int ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
zend_bool nested = EX(nested);
zend_op_array *op_array = EX(op_array);
- if ((nested && EX(prev_execute_data)->opline->opcode == ZEND_INCLUDE_OR_EVAL) ||
- EG(active_symbol_table) == &EG(symbol_table)) {
+ if ((EX(prev_execute_data) && EX(prev_execute_data)->opline
+ && EX(prev_execute_data)->opline->opcode == ZEND_INCLUDE_OR_EVAL)
+ || EG(active_symbol_table) == &EG(symbol_table)) {
zend_detach_symbol_table(TSRMLS_C);
}
@@ -2930,6 +2931,8 @@ static int ZEND_FASTCALL
ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HA
zend_execute(new_op_array, return_value TSRMLS_CC);
}
+ zend_attach_symbol_table(TSRMLS_C);
+
EX(function_state).function = (zend_function *) EX(op_array);
EG(opline_ptr) = &EX(opline);
@@ -7878,6 +7881,8 @@ static int ZEND_FASTCALL
ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HAND
zend_execute(new_op_array, return_value TSRMLS_CC);
}
+ zend_attach_symbol_table(TSRMLS_C);
+
EX(function_state).function = (zend_function *) EX(op_array);
EG(opline_ptr) = &EX(opline);
@@ -12868,6 +12873,8 @@ static int ZEND_FASTCALL
ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND
zend_execute(new_op_array, return_value TSRMLS_CC);
}
+ zend_attach_symbol_table(TSRMLS_C);
+
EX(function_state).function = (zend_function *) EX(op_array);
EG(opline_ptr) = &EX(opline);
@@ -29388,6 +29395,8 @@ static int ZEND_FASTCALL
ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDL
zend_execute(new_op_array, return_value TSRMLS_CC);
}
+ zend_attach_symbol_table(TSRMLS_C);
+
EX(function_state).function = (zend_function *) EX(op_array);
EG(opline_ptr) = &EX(opline);