Skip to content

Commit d8d388e

Browse files
committed
Merge branch 'PHP-8.4'
* PHP-8.4: Fix GH-16591: Assertion error in shm_put_var
2 parents f4e2031 + dd84953 commit d8d388e

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

ext/sysvshm/sysvshm.c

+6
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,12 @@ PHP_FUNCTION(shm_put_var)
256256
php_var_serialize(&shm_var, arg_var, &var_hash);
257257
PHP_VAR_SERIALIZE_DESTROY(var_hash);
258258

259+
if (UNEXPECTED(!shm_list_ptr->ptr)) {
260+
smart_str_free(&shm_var);
261+
zend_throw_error(NULL, "Shared memory block has been destroyed by the serialization function");
262+
RETURN_THROWS();
263+
}
264+
259265
/* insert serialized variable into shared memory */
260266
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);
261267

ext/sysvshm/tests/gh16591.phpt

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
--TEST--
2+
GH-16591 (Assertion error in shm_put_var)
3+
--EXTENSIONS--
4+
sysvshm
5+
--FILE--
6+
<?php
7+
8+
class C {
9+
function __serialize(): array {
10+
global $mem;
11+
shm_detach($mem);
12+
return ['a' => 'b'];
13+
}
14+
}
15+
16+
$mem = shm_attach(1);
17+
try {
18+
shm_put_var($mem, 1, new C);
19+
} catch (Error $e) {
20+
echo $e->getMessage(), "\n";
21+
}
22+
23+
?>
24+
--EXPECT--
25+
Shared memory block has been destroyed by the serialization function

0 commit comments

Comments
 (0)