diff options
-rw-r--r-- | Zend/tests/arg_unpack/by_ref_separation.phpt | 36 | ||||
-rw-r--r-- | Zend/zend_vm_def.h | 6 | ||||
-rw-r--r-- | Zend/zend_vm_execute.h | 6 | ||||
-rw-r--r-- | ext/oci8/tests/driver_name.phpt | 6 | ||||
-rw-r--r-- | sapi/fpm/tests/010.phpt | 6 |
5 files changed, 51 insertions, 9 deletions
diff --git a/Zend/tests/arg_unpack/by_ref_separation.phpt b/Zend/tests/arg_unpack/by_ref_separation.phpt new file mode 100644 index 0000000000..b52c28168a --- /dev/null +++ b/Zend/tests/arg_unpack/by_ref_separation.phpt @@ -0,0 +1,36 @@ +--TEST-- +Array must be separated if unpacking by reference +--FILE-- +<?php + +function inc(&... $args) { + foreach ($args as &$arg) { + $arg++; + } +} + +$arr = [1, 2]; +$arr[] = 3; +$arr2 = $arr; +inc(...$arr); +var_dump($arr); +var_dump($arr2); + +?> +--EXPECT-- +array(3) { + [0]=> + int(2) + [1]=> + int(3) + [2]=> + int(4) +} +array(3) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + int(3) +} diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 00a9effcfa..8d01d99ee9 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -4422,7 +4422,7 @@ ZEND_VM_C_LABEL(send_again): zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht)); - if (OP1_TYPE != IS_CONST && OP1_TYPE != IS_TMP_VAR && Z_IMMUTABLE_P(args)) { + if (OP1_TYPE != IS_CONST && OP1_TYPE != IS_TMP_VAR && Z_REFCOUNT_P(args) > 1) { uint32_t i; int separate = 0; @@ -4434,7 +4434,7 @@ ZEND_VM_C_LABEL(send_again): } } if (separate) { - zval_copy_ctor(args); + SEPARATE_ARRAY(args); ht = Z_ARRVAL_P(args); } } @@ -4448,7 +4448,7 @@ ZEND_VM_C_LABEL(send_again): top = ZEND_CALL_ARG(EX(call), arg_num); if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { - if (!Z_IMMUTABLE_P(args)) { + if (Z_REFCOUNT_P(args) == 1) { ZVAL_MAKE_REF(arg); Z_ADDREF_P(arg); ZVAL_REF(top, Z_REF_P(arg)); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 86dbd0ab37..592681cd98 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -954,7 +954,7 @@ send_again: zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht)); - if (opline->op1_type != IS_CONST && opline->op1_type != IS_TMP_VAR && Z_IMMUTABLE_P(args)) { + if (opline->op1_type != IS_CONST && opline->op1_type != IS_TMP_VAR && Z_REFCOUNT_P(args) > 1) { uint32_t i; int separate = 0; @@ -966,7 +966,7 @@ send_again: } } if (separate) { - zval_copy_ctor(args); + SEPARATE_ARRAY(args); ht = Z_ARRVAL_P(args); } } @@ -980,7 +980,7 @@ send_again: top = ZEND_CALL_ARG(EX(call), arg_num); if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { - if (!Z_IMMUTABLE_P(args)) { + if (Z_REFCOUNT_P(args) == 1) { ZVAL_MAKE_REF(arg); Z_ADDREF_P(arg); ZVAL_REF(top, Z_REF_P(arg)); diff --git a/ext/oci8/tests/driver_name.phpt b/ext/oci8/tests/driver_name.phpt index 758e3979a7..0ff9bc485f 100644 --- a/ext/oci8/tests/driver_name.phpt +++ b/ext/oci8/tests/driver_name.phpt @@ -57,11 +57,11 @@ function get_attr($conn) ?> --EXPECT-- **Test 1.1 - Default values for the attribute ************** -The value of DRIVER_NAME is PHP OCI8 : 2.1.0 +The value of DRIVER_NAME is PHP OCI8 : 2.1.1 ***Test 1.2 - Get the values from different connections ************** Testing with oci_pconnect() -The value of DRIVER_NAME is PHP OCI8 : 2.1.0 +The value of DRIVER_NAME is PHP OCI8 : 2.1.1 Testing with oci_new_connect() -The value of DRIVER_NAME is PHP OCI8 : 2.1.0 +The value of DRIVER_NAME is PHP OCI8 : 2.1.1 Done diff --git a/sapi/fpm/tests/010.phpt b/sapi/fpm/tests/010.phpt index f3b768f319..49e1a07923 100644 --- a/sapi/fpm/tests/010.phpt +++ b/sapi/fpm/tests/010.phpt @@ -2,6 +2,12 @@ FPM: Test status page --SKIPIF-- <?php include "skipif.inc"; ?> +--XFAIL-- +randomly intermittently failing all the time in CI, with diff: +017+ active processes: 0 +018+ total processes: 1 +017- active processes: 1 +018- total processes: 2 --FILE-- <?php |