dmitry Tue Nov 20 09:51:44 2007 UTC Modified files: /ZendEngine2 zend_execute.c zend_execute_API.c zend_globals.h zend_object_handlers.c zend_vm_def.h zend_vm_execute.h zend_vm_execute.skl /php-src/ext/com_dotnet com_com.c com_handlers.c /php-src/ext/spl php_spl.c Log: 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)
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute.c?r1=1.771&r2=1.772&diff_format=u Index: ZendEngine2/zend_execute.c diff -u ZendEngine2/zend_execute.c:1.771 ZendEngine2/zend_execute.c:1.772 --- ZendEngine2/zend_execute.c:1.771 Sun Oct 7 05:15:02 2007 +++ ZendEngine2/zend_execute.c Tue Nov 20 09:51:43 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute.c,v 1.771 2007/10/07 05:15:02 davidw Exp $ */ +/* $Id: zend_execute.c,v 1.772 2007/11/20 09:51:43 dmitry Exp $ */ #define ZEND_INTENSIVE_DEBUGGING 0 @@ -1445,6 +1445,7 @@ } \ 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" http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute_API.c?r1=1.423&r2=1.424&diff_format=u Index: ZendEngine2/zend_execute_API.c diff -u ZendEngine2/zend_execute_API.c:1.423 ZendEngine2/zend_execute_API.c:1.424 --- ZendEngine2/zend_execute_API.c:1.423 Fri Nov 2 10:11:59 2007 +++ ZendEngine2/zend_execute_API.c Tue Nov 20 09:51:43 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute_API.c,v 1.423 2007/11/02 10:11:59 dmitry Exp $ */ +/* $Id: zend_execute_API.c,v 1.424 2007/11/20 09:51:43 dmitry Exp $ */ #include <stdio.h> #include <signal.h> @@ -362,11 +362,11 @@ } return EMPTY_ZSTR; } - 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 ? "::" : ""; @@ -389,9 +389,9 @@ if (!zend_is_executing(TSRMLS_C)) { return NULL_ZSTR; } - switch (EG(function_state_ptr)->function->type) { + switch (EG(current_execute_data)->function_state.function->type) { case ZEND_USER_FUNCTION: { - zstr function_name = ((zend_op_array *) EG(function_state_ptr)->function)->function_name; + zstr function_name = ((zend_op_array *)EG(current_execute_data)->function_state.function)->function_name; if (function_name.v) { return function_name; @@ -404,7 +404,7 @@ } 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_ZSTR; @@ -655,7 +655,6 @@ 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; @@ -1045,9 +1044,6 @@ 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; @@ -1136,7 +1132,6 @@ 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)); @@ -1316,7 +1311,6 @@ 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; @@ -1382,7 +1376,6 @@ 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; http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_globals.h?r1=1.170&r2=1.171&diff_format=u Index: ZendEngine2/zend_globals.h diff -u ZendEngine2/zend_globals.h:1.170 ZendEngine2/zend_globals.h:1.171 --- ZendEngine2/zend_globals.h:1.170 Fri Sep 28 02:04:28 2007 +++ ZendEngine2/zend_globals.h Tue Nov 20 09:51:43 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_globals.h,v 1.170 2007/09/28 02:04:28 jani Exp $ */ +/* $Id: zend_globals.h,v 1.171 2007/11/20 09:51:43 dmitry Exp $ */ #ifndef ZEND_GLOBALS_H #define ZEND_GLOBALS_H @@ -157,7 +157,6 @@ zval error_zval; zval *error_zval_ptr; - zend_function_state *function_state_ptr; zend_ptr_stack arg_types_stack; /* symbol table cache */ http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_object_handlers.c?r1=1.192&r2=1.193&diff_format=u Index: ZendEngine2/zend_object_handlers.c diff -u ZendEngine2/zend_object_handlers.c:1.192 ZendEngine2/zend_object_handlers.c:1.193 --- ZendEngine2/zend_object_handlers.c:1.192 Sat Nov 17 21:51:40 2007 +++ ZendEngine2/zend_object_handlers.c Tue Nov 20 09:51:43 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_object_handlers.c,v 1.192 2007/11/17 21:51:40 pollita Exp $ */ +/* $Id: zend_object_handlers.c,v 1.193 2007/11/20 09:51:43 dmitry Exp $ */ #include "zend.h" #include "zend_globals.h" @@ -655,7 +655,7 @@ 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); @@ -860,7 +860,7 @@ 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); http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.196&r2=1.197&diff_format=u Index: ZendEngine2/zend_vm_def.h diff -u ZendEngine2/zend_vm_def.h:1.196 ZendEngine2/zend_vm_def.h:1.197 --- ZendEngine2/zend_vm_def.h:1.196 Tue Nov 6 14:56:32 2007 +++ ZendEngine2/zend_vm_def.h Tue Nov 20 09:51:43 2007 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_vm_def.h,v 1.196 2007/11/06 14:56:32 dmitry Exp $ */ +/* $Id: zend_vm_def.h,v 1.197 2007/11/20 09:51:43 dmitry Exp $ */ /* If you change this file, please regenerate the zend_vm_execute.h and * zend_vm_opcodes.h files by running: @@ -2088,8 +2088,6 @@ 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) { @@ -2168,7 +2166,6 @@ } 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))) { @@ -3126,7 +3123,6 @@ 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)) { http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.200&r2=1.201&diff_format=u Index: ZendEngine2/zend_vm_execute.h diff -u ZendEngine2/zend_vm_execute.h:1.200 ZendEngine2/zend_vm_execute.h:1.201 --- ZendEngine2/zend_vm_execute.h:1.200 Tue Nov 6 14:56:32 2007 +++ ZendEngine2/zend_vm_execute.h Tue Nov 20 09:51:43 2007 @@ -75,7 +75,6 @@ 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 @@ -85,7 +84,7 @@ #endif if (EX(opline)->handler(&execute_data TSRMLS_CC) > 0) { - return; + return; } } @@ -204,8 +203,6 @@ 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) { @@ -284,7 +281,6 @@ } 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))) { @@ -1907,7 +1903,6 @@ 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)) { @@ -5115,7 +5110,6 @@ 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)) { @@ -8411,7 +8405,6 @@ 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)) { @@ -21935,7 +21928,6 @@ 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)) { http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.skl?r1=1.9&r2=1.10&diff_format=u Index: ZendEngine2/zend_vm_execute.skl diff -u ZendEngine2/zend_vm_execute.skl:1.9 ZendEngine2/zend_vm_execute.skl:1.10 --- ZendEngine2/zend_vm_execute.skl:1.9 Sun Oct 7 05:15:03 2007 +++ ZendEngine2/zend_vm_execute.skl Tue Nov 20 09:51:43 2007 @@ -46,7 +46,6 @@ 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%} @@ -57,7 +56,7 @@ #endif {%ZEND_VM_DISPATCH%} { - {%INTERNAL_EXECUTOR%} + {%INTERNAL_EXECUTOR%} } } http://cvs.php.net/viewvc.cgi/php-src/ext/com_dotnet/com_com.c?r1=1.23&r2=1.24&diff_format=u Index: php-src/ext/com_dotnet/com_com.c diff -u php-src/ext/com_dotnet/com_com.c:1.23 php-src/ext/com_dotnet/com_com.c:1.24 --- php-src/ext/com_dotnet/com_com.c:1.23 Mon Apr 9 15:31:54 2007 +++ php-src/ext/com_dotnet/com_com.c Tue Nov 20 09:51:44 2007 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: com_com.c,v 1.23 2007/04/09 15:31:54 dmitry Exp $ */ +/* $Id: com_com.c,v 1.24 2007/11/20 09:51:44 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -469,7 +469,7 @@ 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) { http://cvs.php.net/viewvc.cgi/php-src/ext/com_dotnet/com_handlers.c?r1=1.44&r2=1.45&diff_format=u Index: php-src/ext/com_dotnet/com_handlers.c diff -u php-src/ext/com_dotnet/com_handlers.c:1.44 php-src/ext/com_dotnet/com_handlers.c:1.45 --- php-src/ext/com_dotnet/com_handlers.c:1.44 Sun Oct 7 05:15:03 2007 +++ php-src/ext/com_dotnet/com_handlers.c Tue Nov 20 09:51:44 2007 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: com_handlers.c,v 1.44 2007/10/07 05:15:03 davidw Exp $ */ +/* $Id: com_handlers.c,v 1.45 2007/11/20 09:51:44 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -255,7 +255,7 @@ 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); } http://cvs.php.net/viewvc.cgi/php-src/ext/spl/php_spl.c?r1=1.117&r2=1.118&diff_format=u Index: php-src/ext/spl/php_spl.c diff -u php-src/ext/spl/php_spl.c:1.117 php-src/ext/spl/php_spl.c:1.118 --- php-src/ext/spl/php_spl.c:1.117 Thu Nov 1 22:31:39 2007 +++ php-src/ext/spl/php_spl.c Tue Nov 20 09:51:44 2007 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_spl.c,v 1.117 2007/11/01 22:31:39 jani Exp $ */ +/* $Id: php_spl.c,v 1.118 2007/11/20 09:51:44 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -265,7 +265,6 @@ 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, "x|x", &class_name, &class_name_len, &file_exts, &file_exts_len) == FAILURE) { RETURN_FALSE; @@ -277,7 +276,6 @@ 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 (unicode) { pos2.u = u_strchr(pos1.u, ','); if (pos2.u) *pos2.u = '\0'; @@ -306,7 +304,6 @@ 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)) { zend_throw_exception_ex(spl_ce_LogicException, 0 TSRMLS_CC, "Class %v could not be loaded", class_name);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php