mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Merge branch 'PHP-8.2' into PHP-8.3
This commit is contained in:
commit
b28ded42eb
3 changed files with 34 additions and 3 deletions
4
NEWS
4
NEWS
|
@ -136,6 +136,10 @@ PHP NEWS
|
||||||
. Fixed bug GH-16293 (Failed assertion when throwing in assert() callback with
|
. Fixed bug GH-16293 (Failed assertion when throwing in assert() callback with
|
||||||
bail enabled). (ilutov)
|
bail enabled). (ilutov)
|
||||||
|
|
||||||
|
- SysVMsg:
|
||||||
|
. Fixed bug GH-16592 (msg_send() crashes when a type does not properly
|
||||||
|
serialized). (David Carlier / cmb)
|
||||||
|
|
||||||
- SysVShm:
|
- SysVShm:
|
||||||
. Fixed bug GH-16591 (Assertion error in shm_put_var). (nielsdos, cmb)
|
. Fixed bug GH-16591 (Assertion error in shm_put_var). (nielsdos, cmb)
|
||||||
|
|
||||||
|
|
|
@ -371,11 +371,19 @@ PHP_FUNCTION(msg_send)
|
||||||
php_var_serialize(&msg_var, message, &var_hash);
|
php_var_serialize(&msg_var, message, &var_hash);
|
||||||
PHP_VAR_SERIALIZE_DESTROY(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
|
/* NB: php_msgbuf is 1 char bigger than a long, so there is no need to
|
||||||
* allocate the extra byte. */
|
* allocate the extra byte. */
|
||||||
messagebuffer = safe_emalloc(ZSTR_LEN(msg_var.s), 1, sizeof(struct php_msgbuf));
|
messagebuffer = safe_emalloc(message_len, 1, sizeof(struct php_msgbuf));
|
||||||
memcpy(messagebuffer->mtext, ZSTR_VAL(msg_var.s), ZSTR_LEN(msg_var.s) + 1);
|
memcpy(messagebuffer->mtext, ZSTR_VAL(str), message_len + 1);
|
||||||
message_len = ZSTR_LEN(msg_var.s);
|
zend_string_release_ex(str, false);
|
||||||
smart_str_free(&msg_var);
|
smart_str_free(&msg_var);
|
||||||
} else {
|
} else {
|
||||||
char *p;
|
char *p;
|
||||||
|
|
19
ext/sysvmsg/tests/gh16592.phpt
Normal file
19
ext/sysvmsg/tests/gh16592.phpt
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue