Merge branch 'PHP-8.2' into PHP-8.3

This commit is contained in:
David Carlier 2024-11-03 13:39:41 +00:00
commit b28ded42eb
No known key found for this signature in database
GPG key ID: 8486F847B4B94EF1
3 changed files with 34 additions and 3 deletions

4
NEWS
View file

@ -136,6 +136,10 @@ PHP NEWS
. Fixed bug GH-16293 (Failed assertion when throwing in assert() callback with
bail enabled). (ilutov)
- SysVMsg:
. Fixed bug GH-16592 (msg_send() crashes when a type does not properly
serialized). (David Carlier / cmb)
- SysVShm:
. Fixed bug GH-16591 (Assertion error in shm_put_var). (nielsdos, cmb)

View file

@ -371,11 +371,19 @@ PHP_FUNCTION(msg_send)
php_var_serialize(&msg_var, message, &var_hash);
PHP_VAR_SERIALIZE_DESTROY(var_hash);
if (UNEXPECTED(EG(exception))) {
smart_str_free(&msg_var);
RETURN_THROWS();
}
zend_string *str = smart_str_extract(&msg_var);
message_len = ZSTR_LEN(str);
/* NB: php_msgbuf is 1 char bigger than a long, so there is no need to
* allocate the extra byte. */
messagebuffer = safe_emalloc(ZSTR_LEN(msg_var.s), 1, sizeof(struct php_msgbuf));
memcpy(messagebuffer->mtext, ZSTR_VAL(msg_var.s), ZSTR_LEN(msg_var.s) + 1);
message_len = ZSTR_LEN(msg_var.s);
messagebuffer = safe_emalloc(message_len, 1, sizeof(struct php_msgbuf));
memcpy(messagebuffer->mtext, ZSTR_VAL(str), message_len + 1);
zend_string_release_ex(str, false);
smart_str_free(&msg_var);
} else {
char *p;

View file

@ -0,0 +1,19 @@
--TEST--
msg_send() segfault when the type does not serialize as expected
--EXTENSIONS--
sysvmsg
--FILE--
<?php
class Test {
function __serialize() {}
}
$q = msg_get_queue(1);
try {
msg_send($q, 1, new Test, true);
} catch (\TypeError $e) {
echo $e->getMessage();
}
?>
--EXPECT--
Test::__serialize() must return an array