- Fixed possible crash in ext/soap because of uninitialized value. (Zdash Urf)
+- Fixed bug #43136 (possible crash on script execution timeout.
+ The EG(function_state_ptr) is completely removed,
+ EG(current_execute_data)->function_state must be used instead). (Dmitry)
- Fixed bug #42848 (Status: header incorrect under FastCGI). (Dmitry)
- Fixed bug #42773 (WSDL error causes HTTP 500 Response). (Dmitry)
- Fixed bug #42737 (preg_split('//u') triggers a E_NOTICE with newlines). (Nuno)
case '+':
if (have_varargs) {
if (!quiet) {
- zend_function *active_function = EG(function_state_ptr)->function;
+ zend_function *active_function = EG(current_execute_data)->function_state.function;
char *class_name = active_function->common.scope ? active_function->common.scope->name : "";
zend_error(E_WARNING, "%s%s%s(): only one varargs specifier (* or +) is permitted",
class_name,
default:
if (!quiet) {
- zend_function *active_function = EG(function_state_ptr)->function;
+ zend_function *active_function = EG(current_execute_data)->function_state.function;
char *class_name = active_function->common.scope ? active_function->common.scope->name : "";
zend_error(E_WARNING, "%s%s%s(): bad type specifier while parsing parameters",
class_name,
if (num_args < min_num_args || (num_args > max_num_args && max_num_args > 0)) {
if (!quiet) {
- zend_function *active_function = EG(function_state_ptr)->function;
+ zend_function *active_function = EG(current_execute_data)->function_state.function;
char *class_name = active_function->common.scope ? active_function->common.scope->name : "";
zend_error(E_WARNING, "%s%s%s() expects %s %d parameter%s, %d given",
class_name,
} \
EG(in_execution) = EX(original_in_execution); \
EG(current_execute_data) = EX(prev_execute_data); \
+ EG(opline_ptr) = NULL; \
ZEND_VM_RETURN()
#include "zend_vm_execute.h"
}
return "";
}
- switch (EG(function_state_ptr)->function->type) {
+ switch (EG(current_execute_data)->function_state.function->type) {
case ZEND_USER_FUNCTION:
case ZEND_INTERNAL_FUNCTION:
{
- zend_class_entry *ce = EG(function_state_ptr)->function->common.scope;
+ zend_class_entry *ce = EG(current_execute_data)->function_state.function->common.scope;
if (space) {
*space = ce ? "::" : "";
if (!zend_is_executing(TSRMLS_C)) {
return NULL;
}
- switch (EG(function_state_ptr)->function->type) {
+ switch (EG(current_execute_data)->function_state.function->type) {
case ZEND_USER_FUNCTION: {
- char *function_name = ((zend_op_array *) EG(function_state_ptr)->function)->function_name;
+ char *function_name = ((zend_op_array *) EG(current_execute_data)->function_state.function)->function_name;
if (function_name) {
return function_name;
}
break;
case ZEND_INTERNAL_FUNCTION:
- return ((zend_internal_function *) EG(function_state_ptr)->function)->function_name;
+ return ((zend_internal_function *) EG(current_execute_data)->function_state.function)->function_name;
break;
default:
return NULL;
zend_uint i;
zval **original_return_value;
HashTable *calling_symbol_table;
- zend_function_state *original_function_state_ptr;
zend_op_array *original_op_array;
zend_op **original_opline_ptr;
zend_class_entry *current_scope;
zend_ptr_stack_2_push(&EG(argument_stack), (void *) (zend_uintptr_t) fci->param_count, NULL);
- original_function_state_ptr = EG(function_state_ptr);
- EG(function_state_ptr) = &EX(function_state);
-
current_scope = EG(scope);
EG(scope) = calling_scope;
zval_ptr_dtor(&method_name);
zval_ptr_dtor(¶ms_array);
}
- EG(function_state_ptr) = original_function_state_ptr;
if (EG(This)) {
zval_ptr_dtor(&EG(This));
zval pv;
zend_op_array *new_op_array;
zend_op_array *original_active_op_array = EG(active_op_array);
- zend_function_state *original_function_state_ptr = EG(function_state_ptr);
zend_uchar original_handle_op_arrays;
int retval;
EG(no_extensions)=0;
EG(opline_ptr) = original_opline_ptr;
EG(active_op_array) = original_active_op_array;
- EG(function_state_ptr) = original_function_state_ptr;
destroy_op_array(new_op_array TSRMLS_CC);
efree(new_op_array);
EG(return_value_ptr_ptr) = original_return_value_ptr_ptr;
zval error_zval;
zval *error_zval_ptr;
- zend_function_state *function_state_ptr;
zend_ptr_stack arg_types_stack;
/* symbol table cache */
ZEND_API void zend_std_call_user_call(INTERNAL_FUNCTION_PARAMETERS) /* {{{ */
{
- zend_internal_function *func = (zend_internal_function *)EG(function_state_ptr)->function;
+ zend_internal_function *func = (zend_internal_function *)EG(current_execute_data)->function_state.function;
zval *method_name_ptr, *method_args_ptr;
zval *method_result_ptr = NULL;
zend_class_entry *ce = Z_OBJCE_P(this_ptr);
ZEND_API void zend_std_callstatic_user_call(INTERNAL_FUNCTION_PARAMETERS) /* {{{ */
{
- zend_internal_function *func = (zend_internal_function *)EG(function_state_ptr)->function;
+ zend_internal_function *func = (zend_internal_function *)EG(current_execute_data)->function_state.function;
zval *method_name_ptr, *method_args_ptr;
zval *method_result_ptr = NULL;
zend_class_entry *ce = EG(scope);
zend_execute_internal(EXECUTE_DATA, return_value_used TSRMLS_CC);
}
- EG(current_execute_data) = EXECUTE_DATA;
-
/* We shouldn't fix bad extensions here,
because it can break proper ones (Bug #34045)
if (!EX(function_state).function->common.return_reference) {
}
EX(function_state).function = (zend_function *) EX(op_array);
- EG(function_state_ptr) = &EX(function_state);
if (EG(This)) {
if (EG(exception) && IS_CTOR_CALL(EX(called_scope))) {
EG(opline_ptr) = &EX(opline);
EG(active_op_array) = EX(op_array);
- EG(function_state_ptr) = &EX(function_state);
destroy_op_array(new_op_array TSRMLS_CC);
efree(new_op_array);
if (EG(exception)) {
EG(opline_ptr) = &EX(opline);
EX(function_state).function = (zend_function *) op_array;
- EG(function_state_ptr) = &EX(function_state);
while (1) {
#ifdef ZEND_WIN32
#endif
if (EX(opline)->handler(&execute_data TSRMLS_CC) > 0) {
- return;
+ return;
}
}
zend_execute_internal(execute_data, return_value_used TSRMLS_CC);
}
- EG(current_execute_data) = execute_data;
-
/* We shouldn't fix bad extensions here,
because it can break proper ones (Bug #34045)
if (!EX(function_state).function->common.return_reference) {
}
EX(function_state).function = (zend_function *) EX(op_array);
- EG(function_state_ptr) = &EX(function_state);
if (EG(This)) {
if (EG(exception) && IS_CTOR_CALL(EX(called_scope))) {
EG(opline_ptr) = &EX(opline);
EG(active_op_array) = EX(op_array);
- EG(function_state_ptr) = &EX(function_state);
destroy_op_array(new_op_array TSRMLS_CC);
efree(new_op_array);
if (EG(exception)) {
EG(opline_ptr) = &EX(opline);
EG(active_op_array) = EX(op_array);
- EG(function_state_ptr) = &EX(function_state);
destroy_op_array(new_op_array TSRMLS_CC);
efree(new_op_array);
if (EG(exception)) {
EG(opline_ptr) = &EX(opline);
EG(active_op_array) = EX(op_array);
- EG(function_state_ptr) = &EX(function_state);
destroy_op_array(new_op_array TSRMLS_CC);
efree(new_op_array);
if (EG(exception)) {
EG(opline_ptr) = &EX(opline);
EG(active_op_array) = EX(op_array);
- EG(function_state_ptr) = &EX(function_state);
destroy_op_array(new_op_array TSRMLS_CC);
efree(new_op_array);
if (EG(exception)) {
EG(opline_ptr) = &EX(opline);
EX(function_state).function = (zend_function *) op_array;
- EG(function_state_ptr) = &EX(function_state);
while (1) {
{%ZEND_VM_CONTINUE_LABEL%}
#endif
{%ZEND_VM_DISPATCH%} {
- {%INTERNAL_EXECUTOR%}
+ {%INTERNAL_EXECUTOR%}
}
}
HRESULT hr;
VARIANT *vargs = NULL, *byref_vals = NULL;
int i, byref_count = 0, j;
- zend_internal_function *f = (zend_internal_function*)EG(function_state_ptr)->function;
+ zend_internal_function *f = (zend_internal_function*)EG(current_execute_data)->function_state.function;
/* assumption: that the active function (f) is the function we generated for the engine */
if (!f || f->arg_info == NULL) {
static PHP_FUNCTION(com_method_handler)
{
Z_OBJ_HANDLER_P(getThis(), call_method)(
- ((zend_internal_function*)EG(function_state_ptr)->function)->function_name,
+ ((zend_internal_function*)EG(current_execute_data)->function_state.function)->function_name,
INTERNAL_FUNCTION_PARAM_PASSTHRU);
}
zval **original_return_value = EG(return_value_ptr_ptr);
zend_op **original_opline_ptr = EG(opline_ptr);
zend_op_array *original_active_op_array = EG(active_op_array);
- zend_function_state *original_function_state_ptr = EG(function_state_ptr);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &class_name, &class_name_len, &file_exts, &file_exts_len) == FAILURE) {
RETURN_FALSE;
EG(return_value_ptr_ptr) = original_return_value;
EG(opline_ptr) = original_opline_ptr;
EG(active_op_array) = original_active_op_array;
- EG(function_state_ptr) = original_function_state_ptr;
pos2 = strchr(pos1, ',');
if (pos2) *pos2 = '\0';
if (spl_autoload(class_name, lc_name, class_name_len, pos1 TSRMLS_CC)) {
EG(return_value_ptr_ptr) = original_return_value;
EG(opline_ptr) = original_opline_ptr;
EG(active_op_array) = original_active_op_array;
- EG(function_state_ptr) = original_function_state_ptr;
if (!found && !SPL_G(autoload_running)) {
/* For internal errors, we generate E_ERROR, for direct calls an exception is thrown.