Skip to content

Commit d33f2cb

Browse files
committed
Added tests and fixed memory leaks.
1 parent fd7ac5f commit d33f2cb

File tree

6 files changed

+52
-6
lines changed

6 files changed

+52
-6
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
Test passing default argument to global user function.
3+
--FILE--
4+
<?php
5+
6+
function F($V = 'Alfa') {
7+
var_dump($V);
8+
}
9+
F(default);
10+
?>
11+
--EXPECT--
12+
string(4) "Alfa"
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Test passing multiple default arguments to global user function.
3+
--FILE--
4+
<?php
5+
6+
function F($V = 'Alfa', $V2 = 'Bravo') {
7+
var_dump($V);
8+
var_dump($V2);
9+
}
10+
F(default, default);
11+
?>
12+
--EXPECT--
13+
string(4) "Alfa"
14+
string(5) "Bravo"
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Test passing default argument to user class method.
3+
--FILE--
4+
<?php
5+
6+
class C {
7+
function F($V = 'Alfa') {
8+
var_dump($V);
9+
}
10+
}
11+
new C()->f(default);
12+
?>
13+
--EXPECT--
14+
string(4) "Alfa"

Zend/zend_vm_def.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9808,7 +9808,7 @@ ZEND_VM_HANDLER(209, ZEND_INIT_PARENT_PROPERTY_HOOK_CALL, CONST, UNUSED|NUM, NUM
98089808
ZEND_VM_NEXT_OPCODE();
98099809
}
98109810

9811-
ZEND_VM_HANDLER(210, ZEND_FETCH_DEFAULT_ARG, UNUSED, UNUSED)
9811+
ZEND_VM_HANDLER(210, ZEND_FETCH_DEFAULT_ARG, UNUSED|NUM, UNUSED)
98129812
{
98139813
USE_OPLINE
98149814
SAVE_OPLINE();
@@ -9838,12 +9838,15 @@ ZEND_VM_HANDLER(210, ZEND_FETCH_DEFAULT_ARG, UNUSED, UNUSED)
98389838
zval reflection_obj;
98399839
// TODO: Check result.
98409840
/*zend_result res =*/ object_init_with_constructor(&reflection_obj, reflection_class, 2, constructor_params, NULL);
9841+
zval_ptr_dtor(&constructor_params[0]);
9842+
zval_ptr_dtor(&constructor_params[1]);
98419843

98429844
zval default_value;
98439845
zend_call_method_with_0_params(Z_OBJ(reflection_obj), reflection_class, NULL, "getDefaultValue", &default_value);
9846+
zval_ptr_dtor(&reflection_obj);
98449847

9845-
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &default_value);
9846-
ZEND_VM_NEXT_OPCODE();
9848+
ZVAL_COPY(EX_VAR(opline->result.var), &default_value);
9849+
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
98479850
}
98489851

98499852
ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_JMP, (OP_JMP_ADDR(op, op->op1) > op), ZEND_JMP_FORWARD, JMP_ADDR, ANY)

Zend/zend_vm_execute.h

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Zend/zend_vm_opcodes.c

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)