mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Fixed bug #30407 (Strange behaviour of default arguments)
This commit is contained in:
parent
877a2bd690
commit
5764d6f41b
1
NEWS
1
NEWS
@ -67,6 +67,7 @@ PHP NEWS
|
||||
- Fixed bug in mysql::client_version(). (Georg)
|
||||
- Fixed ZTS destruction. (Marcus)
|
||||
- Fixed bug #31478 (segfault with empty() / isset()). (Moriyoshi)
|
||||
- Fixed bug #30407 (Strange behaviour of default arguments). (Dmitry)
|
||||
- Fixed bug #29728 (Reflection API Feature: Default parameter value). (Marcus)
|
||||
- Fixed bug #29522 (accessing properties without connection). (Georg)
|
||||
- Fixed bug #29335 (fetch functions now use MYSQLI_BOTH as default). (Georg)
|
||||
|
18
Zend/tests/bug30407.phpt
Normal file
18
Zend/tests/bug30407.phpt
Normal file
@ -0,0 +1,18 @@
|
||||
--TEST--
|
||||
Bug #30407 (Strange behaviour of default arguments)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function haricow($a = 'one') {
|
||||
var_dump($a);
|
||||
$a = 'two';
|
||||
}
|
||||
|
||||
haricow();
|
||||
haricow();
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
string(3) "one"
|
||||
string(3) "one"
|
||||
===DONE===
|
@ -2197,7 +2197,6 @@ ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST)
|
||||
zval **param, *assignment_value;
|
||||
zend_uint arg_num = opline->op1.u.constant.value.lval;
|
||||
zend_free_op free_res;
|
||||
zval **var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W);
|
||||
|
||||
if (zend_ptr_stack_get_arg(arg_num, (void **) ¶m TSRMLS_CC)==FAILURE) {
|
||||
if (opline->op2.u.constant.type == IS_CONSTANT || opline->op2.u.constant.type==IS_CONSTANT_ARRAY) {
|
||||
@ -2219,8 +2218,10 @@ ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST)
|
||||
assignment_value = &opline->op2.u.constant;
|
||||
}
|
||||
zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value TSRMLS_CC);
|
||||
zend_receive(var_ptr, assignment_value TSRMLS_CC);
|
||||
zend_assign_to_variable(NULL, &opline->result, NULL, assignment_value, IS_VAR, EX(Ts) TSRMLS_CC);
|
||||
} else {
|
||||
zval **var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W);
|
||||
|
||||
assignment_value = *param;
|
||||
zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value TSRMLS_CC);
|
||||
if (PZVAL_IS_REF(assignment_value)) {
|
||||
|
@ -638,7 +638,6 @@ static int ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
zval **param, *assignment_value;
|
||||
zend_uint arg_num = opline->op1.u.constant.value.lval;
|
||||
zend_free_op free_res;
|
||||
zval **var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W);
|
||||
|
||||
if (zend_ptr_stack_get_arg(arg_num, (void **) ¶m TSRMLS_CC)==FAILURE) {
|
||||
if (opline->op2.u.constant.type == IS_CONSTANT || opline->op2.u.constant.type==IS_CONSTANT_ARRAY) {
|
||||
@ -660,8 +659,10 @@ static int ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
assignment_value = &opline->op2.u.constant;
|
||||
}
|
||||
zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value TSRMLS_CC);
|
||||
zend_receive(var_ptr, assignment_value TSRMLS_CC);
|
||||
zend_assign_to_variable(NULL, &opline->result, NULL, assignment_value, IS_VAR, EX(Ts) TSRMLS_CC);
|
||||
} else {
|
||||
zval **var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W);
|
||||
|
||||
assignment_value = *param;
|
||||
zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value TSRMLS_CC);
|
||||
if (PZVAL_IS_REF(assignment_value)) {
|
||||
@ -29910,7 +29911,6 @@ static int ZEND_RECV_INIT_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
zval **param, *assignment_value;
|
||||
zend_uint arg_num = opline->op1.u.constant.value.lval;
|
||||
zend_free_op free_res;
|
||||
zval **var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W);
|
||||
|
||||
if (zend_ptr_stack_get_arg(arg_num, (void **) ¶m TSRMLS_CC)==FAILURE) {
|
||||
if (opline->op2.u.constant.type == IS_CONSTANT || opline->op2.u.constant.type==IS_CONSTANT_ARRAY) {
|
||||
@ -29932,8 +29932,10 @@ static int ZEND_RECV_INIT_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
assignment_value = &opline->op2.u.constant;
|
||||
}
|
||||
zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value TSRMLS_CC);
|
||||
zend_receive(var_ptr, assignment_value TSRMLS_CC);
|
||||
zend_assign_to_variable(NULL, &opline->result, NULL, assignment_value, IS_VAR, EX(Ts) TSRMLS_CC);
|
||||
} else {
|
||||
zval **var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W);
|
||||
|
||||
assignment_value = *param;
|
||||
zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value TSRMLS_CC);
|
||||
if (PZVAL_IS_REF(assignment_value)) {
|
||||
|
Loading…
Reference in New Issue
Block a user