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-16591: Assertion error in shm_put_var
This commit is contained in:
@@ -256,6 +256,12 @@ PHP_FUNCTION(shm_put_var)
|
|||||||
php_var_serialize(&shm_var, arg_var, &var_hash);
|
php_var_serialize(&shm_var, arg_var, &var_hash);
|
||||||
PHP_VAR_SERIALIZE_DESTROY(var_hash);
|
PHP_VAR_SERIALIZE_DESTROY(var_hash);
|
||||||
|
|
||||||
|
if (UNEXPECTED(!shm_list_ptr->ptr)) {
|
||||||
|
smart_str_free(&shm_var);
|
||||||
|
zend_throw_error(NULL, "Shared memory block has been destroyed by the serialization function");
|
||||||
|
RETURN_THROWS();
|
||||||
|
}
|
||||||
|
|
||||||
/* insert serialized variable into shared memory */
|
/* insert serialized variable into shared memory */
|
||||||
ret = php_put_shm_data(shm_list_ptr->ptr, shm_key, shm_var.s? ZSTR_VAL(shm_var.s) : NULL, shm_var.s? ZSTR_LEN(shm_var.s) : 0);
|
ret = php_put_shm_data(shm_list_ptr->ptr, shm_key, shm_var.s? ZSTR_VAL(shm_var.s) : NULL, shm_var.s? ZSTR_LEN(shm_var.s) : 0);
|
||||||
|
|
||||||
|
|||||||
25
ext/sysvshm/tests/gh16591.phpt
Normal file
25
ext/sysvshm/tests/gh16591.phpt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
--TEST--
|
||||||
|
GH-16591 (Assertion error in shm_put_var)
|
||||||
|
--EXTENSIONS--
|
||||||
|
sysvshm
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class C {
|
||||||
|
function __serialize(): array {
|
||||||
|
global $mem;
|
||||||
|
shm_detach($mem);
|
||||||
|
return ['a' => 'b'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$mem = shm_attach(1);
|
||||||
|
try {
|
||||||
|
shm_put_var($mem, 1, new C);
|
||||||
|
} catch (Error $e) {
|
||||||
|
echo $e->getMessage(), "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
Shared memory block has been destroyed by the serialization function
|
||||||
Reference in New Issue
Block a user