mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Merge branch 'PHP-8.3'
* PHP-8.3: Fix instable array during in-place modification in uksort
This commit is contained in:
@@ -901,19 +901,11 @@ static void php_usort(INTERNAL_FUNCTION_PARAMETERS, bucket_compare_func_t compar
|
||||
RETURN_TRUE;
|
||||
}
|
||||
|
||||
/* Copy array, so the in-place modifications will not be visible to the callback function.
|
||||
* Unless there are no other references since we know for sure it won't be visible. */
|
||||
bool in_place = zend_may_modify_arg_in_place(array);
|
||||
if (!in_place) {
|
||||
arr = zend_array_dup(arr);
|
||||
}
|
||||
/* Copy array, so the in-place modifications will not be visible to the callback function */
|
||||
arr = zend_array_dup(arr);
|
||||
|
||||
zend_hash_sort(arr, compare_func, renumber);
|
||||
|
||||
if (in_place) {
|
||||
GC_ADDREF(arr);
|
||||
}
|
||||
|
||||
zval garbage;
|
||||
ZVAL_COPY_VALUE(&garbage, array);
|
||||
ZVAL_ARR(array, arr);
|
||||
|
||||
18
ext/standard/tests/gh13279.phpt
Normal file
18
ext/standard/tests/gh13279.phpt
Normal file
@@ -0,0 +1,18 @@
|
||||
--TEST--
|
||||
GH-13279: Instable array during in-place modification in uksort
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
// Make sure the array is not const
|
||||
$array = [];
|
||||
$array['a'] = 1;
|
||||
$array['b'] = 2;
|
||||
|
||||
uksort($array, function ($a, $b) use (&$array) {
|
||||
return $array[$a] - $array[$b];
|
||||
});
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
===DONE===
|
||||
Reference in New Issue
Block a user