mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Merge branch 'PHP-8.3' into PHP-8.4
* PHP-8.3: Fix RCN violations in array functions
This commit is contained in:
commit
f77c04d007
5 changed files with 59 additions and 15 deletions
1
NEWS
1
NEWS
|
@ -31,6 +31,7 @@ PHP NEWS
|
||||||
|
|
||||||
- Standard:
|
- Standard:
|
||||||
. Fix misleading errors in printf(). (nielsdos)
|
. Fix misleading errors in printf(). (nielsdos)
|
||||||
|
. Fix RCN violations in array functions. (nielsdos)
|
||||||
|
|
||||||
- Streams:
|
- Streams:
|
||||||
. Fixed GH-13264 (fgets() and stream_get_line() do not return false on filter
|
. Fixed GH-13264 (fgets() and stream_get_line() do not return false on filter
|
||||||
|
|
|
@ -393,8 +393,6 @@ static const func_info_t func_infos[] = {
|
||||||
F1("compact", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
F1("compact", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||||
FN("array_fill", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_ANY),
|
FN("array_fill", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_ANY),
|
||||||
F1("array_fill_keys", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
F1("array_fill_keys", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||||
F1("array_replace", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
|
||||||
F1("array_replace_recursive", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
|
||||||
FN("array_keys", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_LONG|MAY_BE_ARRAY_OF_STRING),
|
FN("array_keys", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_LONG|MAY_BE_ARRAY_OF_STRING),
|
||||||
FN("array_values", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
FN("array_values", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||||
F1("array_count_values", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG),
|
F1("array_count_values", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG),
|
||||||
|
@ -403,13 +401,8 @@ static const func_info_t func_infos[] = {
|
||||||
F1("array_flip", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG|MAY_BE_ARRAY_OF_STRING),
|
F1("array_flip", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_LONG|MAY_BE_ARRAY_OF_STRING),
|
||||||
F1("array_change_key_case", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
F1("array_change_key_case", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||||
F1("array_intersect_key", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
F1("array_intersect_key", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||||
F1("array_intersect_ukey", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
|
||||||
F1("array_intersect", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
|
||||||
F1("array_uintersect", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
|
||||||
F1("array_intersect_assoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
F1("array_intersect_assoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||||
F1("array_uintersect_assoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
F1("array_uintersect_assoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||||
F1("array_intersect_uassoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
|
||||||
F1("array_uintersect_uassoc", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
|
||||||
F1("array_diff_key", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
F1("array_diff_key", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||||
F1("array_diff_ukey", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
F1("array_diff_ukey", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||||
F1("array_udiff", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
F1("array_udiff", MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_KEY_STRING|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF),
|
||||||
|
|
|
@ -1686,13 +1686,11 @@ function array_merge_recursive(array ...$arrays): array {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @compile-time-eval
|
* @compile-time-eval
|
||||||
* @refcount 1
|
|
||||||
*/
|
*/
|
||||||
function array_replace(array $array, array ...$replacements): array {}
|
function array_replace(array $array, array ...$replacements): array {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @compile-time-eval
|
* @compile-time-eval
|
||||||
* @refcount 1
|
|
||||||
*/
|
*/
|
||||||
function array_replace_recursive(array $array, array ...$replacements): array {}
|
function array_replace_recursive(array $array, array ...$replacements): array {}
|
||||||
|
|
||||||
|
@ -1765,19 +1763,16 @@ function array_intersect_key(array $array, array ...$arrays): array {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array|callable $rest
|
* @param array|callable $rest
|
||||||
* @refcount 1
|
|
||||||
*/
|
*/
|
||||||
function array_intersect_ukey(array $array, ...$rest): array {}
|
function array_intersect_ukey(array $array, ...$rest): array {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @compile-time-eval
|
* @compile-time-eval
|
||||||
* @refcount 1
|
|
||||||
*/
|
*/
|
||||||
function array_intersect(array $array, array ...$arrays): array {}
|
function array_intersect(array $array, array ...$arrays): array {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array|callable $rest
|
* @param array|callable $rest
|
||||||
* @refcount 1
|
|
||||||
*/
|
*/
|
||||||
function array_uintersect(array $array, ...$rest): array {}
|
function array_uintersect(array $array, ...$rest): array {}
|
||||||
|
|
||||||
|
@ -1795,13 +1790,11 @@ function array_uintersect_assoc(array $array, ...$rest): array {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array|callable $rest
|
* @param array|callable $rest
|
||||||
* @refcount 1
|
|
||||||
*/
|
*/
|
||||||
function array_intersect_uassoc(array $array, ...$rest): array {}
|
function array_intersect_uassoc(array $array, ...$rest): array {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array|callable $rest
|
* @param array|callable $rest
|
||||||
* @refcount 1
|
|
||||||
*/
|
*/
|
||||||
function array_uintersect_uassoc(array $array, ...$rest): array {}
|
function array_uintersect_uassoc(array $array, ...$rest): array {}
|
||||||
|
|
||||||
|
|
2
ext/standard/basic_functions_arginfo.h
generated
2
ext/standard/basic_functions_arginfo.h
generated
|
@ -1,5 +1,5 @@
|
||||||
/* This is a generated file, edit the .stub.php file instead.
|
/* This is a generated file, edit the .stub.php file instead.
|
||||||
* Stub hash: b15d2f9fa727a78e6fa4d5c60a65d8848f655fe2 */
|
* Stub hash: 5eeeaf1f292c72e4553dabc5a64f27781bf57d86 */
|
||||||
|
|
||||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_time_limit, 0, 1, _IS_BOOL, 0)
|
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_time_limit, 0, 1, _IS_BOOL, 0)
|
||||||
ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0)
|
ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0)
|
||||||
|
|
57
ext/standard/tests/array/rcn_in_place.phpt
Normal file
57
ext/standard/tests/array/rcn_in_place.phpt
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
--TEST--
|
||||||
|
RCN check for in-place array modifications
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
// Important: do NOT replace range(0, 1) with a variable, these NEED to be TMPVARs!
|
||||||
|
var_dump(array_replace(range(0, 1), []));
|
||||||
|
var_dump(array_replace_recursive(range(0, 1), []));
|
||||||
|
var_dump(array_merge(range(0, 1), []));
|
||||||
|
var_dump(array_merge_recursive(range(0, 1), []));
|
||||||
|
var_dump(array_unique(range(0, 1)));
|
||||||
|
var_dump(array_intersect_ukey(range(0, 1), [], fn () => 0));
|
||||||
|
var_dump(array_intersect(range(0, 1), []));
|
||||||
|
var_dump(array_uintersect(range(0, 1), [], fn () => 0));
|
||||||
|
var_dump(array_intersect_uassoc(range(0, 1), [], fn () => 0));
|
||||||
|
var_dump(array_uintersect_uassoc(range(0, 1), [], fn () => 0, fn () => 0));
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
array(2) {
|
||||||
|
[0]=>
|
||||||
|
int(0)
|
||||||
|
[1]=>
|
||||||
|
int(1)
|
||||||
|
}
|
||||||
|
array(2) {
|
||||||
|
[0]=>
|
||||||
|
int(0)
|
||||||
|
[1]=>
|
||||||
|
int(1)
|
||||||
|
}
|
||||||
|
array(2) {
|
||||||
|
[0]=>
|
||||||
|
int(0)
|
||||||
|
[1]=>
|
||||||
|
int(1)
|
||||||
|
}
|
||||||
|
array(2) {
|
||||||
|
[0]=>
|
||||||
|
int(0)
|
||||||
|
[1]=>
|
||||||
|
int(1)
|
||||||
|
}
|
||||||
|
array(2) {
|
||||||
|
[0]=>
|
||||||
|
int(0)
|
||||||
|
[1]=>
|
||||||
|
int(1)
|
||||||
|
}
|
||||||
|
array(0) {
|
||||||
|
}
|
||||||
|
array(0) {
|
||||||
|
}
|
||||||
|
array(0) {
|
||||||
|
}
|
||||||
|
array(0) {
|
||||||
|
}
|
||||||
|
array(0) {
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue