mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Merge branch 'PHP-8.4'
* PHP-8.4: Fix GH-17447: Assertion failure when array popping a self addressing variable
This commit is contained in:
@@ -3571,7 +3571,8 @@ PHP_FUNCTION(array_pop)
|
||||
break;
|
||||
}
|
||||
}
|
||||
RETVAL_COPY_DEREF(val);
|
||||
RETVAL_COPY_VALUE(val);
|
||||
ZVAL_UNDEF(val);
|
||||
|
||||
if (idx == (Z_ARRVAL_P(stack)->nNextFreeElement - 1)) {
|
||||
Z_ARRVAL_P(stack)->nNextFreeElement = Z_ARRVAL_P(stack)->nNextFreeElement - 1;
|
||||
@@ -3595,7 +3596,8 @@ PHP_FUNCTION(array_pop)
|
||||
break;
|
||||
}
|
||||
}
|
||||
RETVAL_COPY_DEREF(val);
|
||||
RETVAL_COPY_VALUE(val);
|
||||
ZVAL_UNDEF(val);
|
||||
|
||||
if (!p->key && (zend_long)p->h == (Z_ARRVAL_P(stack)->nNextFreeElement - 1)) {
|
||||
Z_ARRVAL_P(stack)->nNextFreeElement = Z_ARRVAL_P(stack)->nNextFreeElement - 1;
|
||||
@@ -3605,6 +3607,10 @@ PHP_FUNCTION(array_pop)
|
||||
zend_hash_del_bucket(Z_ARRVAL_P(stack), p);
|
||||
}
|
||||
zend_hash_internal_pointer_reset(Z_ARRVAL_P(stack));
|
||||
|
||||
if (Z_ISREF_P(return_value)) {
|
||||
zend_unwrap_reference(return_value);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
12
ext/standard/tests/array/gh17447.phpt
Normal file
12
ext/standard/tests/array/gh17447.phpt
Normal file
@@ -0,0 +1,12 @@
|
||||
--TEST--
|
||||
GH-17447 (Assertion failure when array poping a self addressing variable)
|
||||
--FILE--
|
||||
<?php
|
||||
$input[] = &$input;
|
||||
var_dump(array_pop($input), $input);
|
||||
?>
|
||||
--EXPECT--
|
||||
array(0) {
|
||||
}
|
||||
array(0) {
|
||||
}
|
||||
Reference in New Issue
Block a user