mirror of
https://github.com/php/php-src.git
synced 2026-03-26 17:22:15 +01:00
Always duplicate the array before doing a sort with user-defined comparison function, to avoid access to the intermediate inconsistent state. I've also dropped the "array modification" warning, as protection against modifications is no longer relevant if we're always working on a copy anyway. This also required some changes to how SplArray forwards calls to sorting functions.
39 lines
528 B
PHP
39 lines
528 B
PHP
--TEST--
|
|
Bug #71334: Cannot access array keys while uksort()
|
|
--FILE--
|
|
<?php
|
|
|
|
class myClass
|
|
{
|
|
private $a = [
|
|
'foo-test' => [1],
|
|
'-' => [2],
|
|
'bar-test' => [3]
|
|
];
|
|
|
|
private function _mySort($x, $y)
|
|
{
|
|
if (!isset($this->a[$x])) {
|
|
throw new Exception('Missing X: "' . $x . '"');
|
|
}
|
|
|
|
if (!isset($this->a[$y])) {
|
|
throw new Exception('Missing Y: "' . $y . '"');
|
|
}
|
|
|
|
return $x < $y;
|
|
}
|
|
|
|
public function __construct()
|
|
{
|
|
uksort($this->a, [$this, '_mySort']);
|
|
}
|
|
}
|
|
|
|
new myClass();
|
|
echo "Done";
|
|
|
|
?>
|
|
--EXPECT--
|
|
Done
|