File tree Expand file tree Collapse file tree 2 files changed +26
-3
lines changed Expand file tree Collapse file tree 2 files changed +26
-3
lines changed Original file line number Diff line number Diff line change @@ -371,11 +371,15 @@ PHP_FUNCTION(msg_send)
371
371
php_var_serialize (& msg_var , message , & var_hash );
372
372
PHP_VAR_SERIALIZE_DESTROY (var_hash );
373
373
374
+ message_len = smart_str_get_len (& msg_var );
375
+ if (!message_len ) {
376
+ RETURN_FALSE ;
377
+ }
378
+
374
379
/* NB: php_msgbuf is 1 char bigger than a long, so there is no need to
375
380
* allocate the extra byte. */
376
- messagebuffer = safe_emalloc (ZSTR_LEN (msg_var .s ), 1 , sizeof (struct php_msgbuf ));
377
- memcpy (messagebuffer -> mtext , ZSTR_VAL (msg_var .s ), ZSTR_LEN (msg_var .s ) + 1 );
378
- message_len = ZSTR_LEN (msg_var .s );
381
+ messagebuffer = safe_emalloc (message_len , 1 , sizeof (struct php_msgbuf ));
382
+ memcpy (messagebuffer -> mtext , ZSTR_VAL (msg_var .s ), message_len + 1 );
379
383
smart_str_free (& msg_var );
380
384
} else {
381
385
char * p ;
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ msg_send() segfault when the type does not serialize as expected
3
+ --EXTENSIONS--
4
+ sysvmsg
5
+ --FILE--
6
+ <?php
7
+ class Test {
8
+ function __serialize () {}
9
+ }
10
+
11
+ $ q = msg_get_queue (1 );
12
+ try {
13
+ msg_send ($ q , 1 , new Test , true );
14
+ } catch (\TypeError $ e ) {
15
+ echo $ e ->getMessage ();
16
+ }
17
+ ?>
18
+ --EXPECT--
19
+ Test::__serialize() must return an array
You can’t perform that action at this time.
0 commit comments