1
0
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:
Niels Dossche
2024-10-26 15:08:22 +02:00
2 changed files with 31 additions and 0 deletions

View File

@@ -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);

View 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