diff --git a/ext/standard/array.c b/ext/standard/array.c index c1d33ee2c42dc..c64a43bc69c68 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -5791,6 +5791,8 @@ PHP_FUNCTION(array_multisort) } if (repack) { zend_hash_to_packed(hash); + } else { + zend_hash_rehash(hash); } } } diff --git a/ext/standard/tests/array/gh9244.phpt b/ext/standard/tests/array/gh9244.phpt new file mode 100644 index 0000000000000..04c34d426dad8 --- /dev/null +++ b/ext/standard/tests/array/gh9244.phpt @@ -0,0 +1,11 @@ +--TEST-- +Bug GH-9244 (Segfault with array_multisort + array_shift) +--FILE-- + 1, 'bar' => 2]; +$order = [4, 3]; +array_multisort($order, $items); +var_dump(array_shift($items)); +?> +--EXPECT-- +int(2)