From d37c328eb20ccdffc62870dcdbe34ec892ebc061 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Thu, 4 Aug 2022 14:00:38 +0200 Subject: [PATCH] Fix GH-9244: Segfault with array_multisort + array_shift After restructuring non-packed arrays, we either need to pack them if possible, or to rehash them. --- ext/standard/array.c | 2 ++ ext/standard/tests/array/gh9244.phpt | 11 +++++++++++ 2 files changed, 13 insertions(+) create mode 100644 ext/standard/tests/array/gh9244.phpt diff --git a/ext/standard/array.c b/ext/standard/array.c index c1d33ee2c42d..c64a43bc69c6 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 000000000000..04c34d426dad --- /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)