]> granicus.if.org Git - php/commitdiff
Fixed access to freed memory in tests/classes/__call_001.phpt
authorDmitry Stogov <dmitry@php.net>
Tue, 2 Oct 2007 08:47:42 +0000 (08:47 +0000)
committerDmitry Stogov <dmitry@php.net>
Tue, 2 Oct 2007 08:47:42 +0000 (08:47 +0000)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 033c9943e4bdb39a804990b92e13277a98a7dcdf..14b4d5d25bcc3e59d000b034a2df45c83c2ec932 100644 (file)
@@ -2015,6 +2015,7 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY)
        if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
                ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
                INIT_ZVAL(*(EX_T(opline->result.u.var).var.ptr));
+        EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference;
 
                if (EX(function_state).function->common.arg_info) {
                        zend_uint i=0;
@@ -2047,8 +2048,6 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY)
 */
                if (!return_value_used) {
                        zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
-               } else {
-                       EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference;
                }
        } else if (EX(function_state).function->type == ZEND_USER_FUNCTION) {
                HashTable *function_symbol_table;
index 6e3c5c0097d752220c9e2ac831a16f4697e57e0f..bb1821d89245f682f6998e41124f5095521f8d86 100644 (file)
@@ -182,6 +182,7 @@ static int zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
        if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
                ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
                INIT_ZVAL(*(EX_T(opline->result.u.var).var.ptr));
+        EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference;
 
                if (EX(function_state).function->common.arg_info) {
                        zend_uint i=0;
@@ -214,8 +215,6 @@ static int zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
 */
                if (!return_value_used) {
                        zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
-               } else {
-                       EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference;
                }
        } else if (EX(function_state).function->type == ZEND_USER_FUNCTION) {
                HashTable *function_symbol_table;