]> granicus.if.org Git - php/commitdiff
- No reason not to pass return_value_ptr for non return-by-reference functions
authorMarcus Boerger <helly@php.net>
Thu, 8 Feb 2007 14:47:32 +0000 (14:47 +0000)
committerMarcus Boerger <helly@php.net>
Thu, 8 Feb 2007 14:47:32 +0000 (14:47 +0000)
Zend/zend_execute.c
Zend/zend_execute_API.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index da3cf32520b0f462e31f06ec100599ec9dadc406..778d795bc29439f4b91705a1543ffb6fab15da8f 100644 (file)
@@ -1368,7 +1368,7 @@ ZEND_API opcode_handler_t *zend_opcode_handlers;
 ZEND_API void execute_internal(zend_execute_data *execute_data_ptr, int return_value_used TSRMLS_DC)
 {
        zval **return_value_ptr = &(*(temp_variable *)((char *) execute_data_ptr->Ts + execute_data_ptr->opline->result.u.var)).var.ptr;
-       ((zend_internal_function *) execute_data_ptr->function_state.function)->handler(execute_data_ptr->opline->extended_value, *return_value_ptr, execute_data_ptr->function_state.function->common.return_reference?return_value_ptr:NULL, execute_data_ptr->object, return_value_used TSRMLS_CC);
+       ((zend_internal_function *) execute_data_ptr->function_state.function)->handler(execute_data_ptr->opline->extended_value, *return_value_ptr, return_value_ptr, execute_data_ptr->object, return_value_used TSRMLS_CC);
 }
 
 #define ZEND_VM_NEXT_OPCODE() \
index ab01431b96f8246d8405f8b7c241310b5b5bc23c..dec25135d4f5340a1eaa73b9cf902ab033e189da 100644 (file)
@@ -1052,11 +1052,13 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
                if (EX(function_state).function->common.scope) {
                        EG(scope) = EX(function_state).function->common.scope;
                }
-               ((zend_internal_function *) EX(function_state).function)->handler(fci->param_count, *fci->retval_ptr_ptr, EX(function_state).function->common.return_reference?fci->retval_ptr_ptr:NULL, (fci->object_pp?*fci->object_pp:NULL), 1 TSRMLS_CC);
+               ((zend_internal_function *) EX(function_state).function)->handler(fci->param_count, *fci->retval_ptr_ptr, fci->retval_ptr_ptr, (fci->object_pp?*fci->object_pp:NULL), 1 TSRMLS_CC);
+               /*      We shouldn't fix bad extensions here,
+                   because it can break proper ones (Bug #34045)
                if (!EX(function_state).function->common.return_reference)
                {
                        INIT_PZVAL(*fci->retval_ptr_ptr);
-               }
+               }*/
        }
        zend_ptr_stack_clear_multiple(TSRMLS_C);
        if (call_via_handler) {
index 1a100cb59a2671c90824633fcbf0dae10ad34e8c..be705eb2594d01726d12aa1f0f058d7721d72d5a 100644 (file)
@@ -1942,7 +1942,7 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY)
                }
                if (!zend_execute_internal) {
                        /* saves one function call if zend_execute_internal is not used */
-                       ((zend_internal_function *) EX(function_state).function)->handler(opline->extended_value, EX_T(opline->result.u.var).var.ptr, EX(function_state).function->common.return_reference?&EX_T(opline->result.u.var).var.ptr:NULL, EX(object), return_value_used TSRMLS_CC);
+                       ((zend_internal_function *) EX(function_state).function)->handler(opline->extended_value, EX_T(opline->result.u.var).var.ptr, &EX_T(opline->result.u.var).var.ptr, EX(object), return_value_used TSRMLS_CC);
                } else {
                        zend_execute_internal(EXECUTE_DATA, return_value_used TSRMLS_CC);
                }
index 24618c57c0ca2401d98af4755eeb9ee1d60cbd66..c1b1d9f46469bcd191e2a41b315396bbbd4eb191 100644 (file)
@@ -206,7 +206,7 @@ static int zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
                }
                if (!zend_execute_internal) {
                        /* saves one function call if zend_execute_internal is not used */
-                       ((zend_internal_function *) EX(function_state).function)->handler(opline->extended_value, EX_T(opline->result.u.var).var.ptr, EX(function_state).function->common.return_reference?&EX_T(opline->result.u.var).var.ptr:NULL, EX(object), return_value_used TSRMLS_CC);
+                       ((zend_internal_function *) EX(function_state).function)->handler(opline->extended_value, EX_T(opline->result.u.var).var.ptr, &EX_T(opline->result.u.var).var.ptr, EX(object), return_value_used TSRMLS_CC);
                } else {
                        zend_execute_internal(execute_data, return_value_used TSRMLS_CC);
                }