File tree Expand file tree Collapse file tree 3 files changed +30
-10
lines changed Expand file tree Collapse file tree 3 files changed +30
-10
lines changed Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Freeing of function "name" when dynamic call fails
3
+ --FILE--
4
+ <?php
5
+
6
+ try {
7
+ $ bar = "bar " ;
8
+ ("foo " . $ bar )();
9
+ } catch (Error $ e ) {
10
+ echo $ e ->getMessage (), "\n" ;
11
+ }
12
+ try {
13
+ $ bar = ["bar " ];
14
+ (["foo " ] + $ bar )();
15
+ } catch (Error $ e ) {
16
+ echo $ e ->getMessage (), "\n" ;
17
+ }
18
+ try {
19
+ (new stdClass )();
20
+ } catch (Error $ e ) {
21
+ echo $ e ->getMessage (), "\n" ;
22
+ }
23
+
24
+ ?>
25
+ --EXPECT--
26
+ Call to undefined function foobar()
27
+ Function name must be a string
28
+ Function name must be a string
Original file line number Diff line number Diff line change @@ -3816,11 +3816,11 @@ ZEND_VM_C_LABEL(try_function_name):
3816
3816
call = NULL ;
3817
3817
}
3818
3818
3819
+ FREE_OP2 ();
3819
3820
if (UNEXPECTED (!call )) {
3820
3821
HANDLE_EXCEPTION ();
3821
3822
}
3822
3823
3823
- FREE_OP2 ();
3824
3824
if (OP2_TYPE & (IS_VAR |IS_TMP_VAR )) {
3825
3825
if (UNEXPECTED (EG (exception ))) {
3826
3826
if (call ) {
@@ -3832,8 +3832,6 @@ ZEND_VM_C_LABEL(try_function_name):
3832
3832
}
3833
3833
HANDLE_EXCEPTION ();
3834
3834
}
3835
- } else if (UNEXPECTED (!call )) {
3836
- HANDLE_EXCEPTION ();
3837
3835
}
3838
3836
3839
3837
call -> prev_execute_data = EX (call );
Original file line number Diff line number Diff line change @@ -2951,8 +2951,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_H
2951
2951
}
2952
2952
HANDLE_EXCEPTION();
2953
2953
}
2954
- } else if (UNEXPECTED(!call)) {
2955
- HANDLE_EXCEPTION();
2956
2954
}
2957
2955
2958
2956
call->prev_execute_data = EX(call);
@@ -3107,11 +3105,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_
3107
3105
call = NULL;
3108
3106
}
3109
3107
3108
+ zval_ptr_dtor_nogc(free_op2);
3110
3109
if (UNEXPECTED(!call)) {
3111
3110
HANDLE_EXCEPTION();
3112
3111
}
3113
3112
3114
- zval_ptr_dtor_nogc(free_op2);
3115
3113
if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
3116
3114
if (UNEXPECTED(EG(exception))) {
3117
3115
if (call) {
@@ -3123,8 +3121,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_
3123
3121
}
3124
3122
HANDLE_EXCEPTION();
3125
3123
}
3126
- } else if (UNEXPECTED(!call)) {
3127
- HANDLE_EXCEPTION();
3128
3124
}
3129
3125
3130
3126
call->prev_execute_data = EX(call);
@@ -3240,8 +3236,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HAND
3240
3236
}
3241
3237
HANDLE_EXCEPTION();
3242
3238
}
3243
- } else if (UNEXPECTED(!call)) {
3244
- HANDLE_EXCEPTION();
3245
3239
}
3246
3240
3247
3241
call->prev_execute_data = EX(call);
You can’t perform that action at this time.
0 commit comments