mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Fix socket_export_stream() with wrong protocol
Closes GH-12310.
This commit is contained in:
parent
e127f87114
commit
b5da98b972
3 changed files with 24 additions and 9 deletions
3
NEWS
3
NEWS
|
@ -59,6 +59,9 @@ PHP NEWS
|
||||||
. Fix return type of stub of xml_parse_into_struct(). (nielsdos)
|
. Fix return type of stub of xml_parse_into_struct(). (nielsdos)
|
||||||
. Fix memory leak when calling xml_parse_into_struct() twice. (nielsdos)
|
. Fix memory leak when calling xml_parse_into_struct() twice. (nielsdos)
|
||||||
|
|
||||||
|
- Sockets:
|
||||||
|
. Fix socket_export_stream() with wrong protocol (twosee)
|
||||||
|
|
||||||
28 Sep 2023, PHP 8.1.24
|
28 Sep 2023, PHP 8.1.24
|
||||||
|
|
||||||
- Core:
|
- Core:
|
||||||
|
|
|
@ -2251,7 +2251,7 @@ PHP_FUNCTION(socket_export_stream)
|
||||||
php_socket *socket;
|
php_socket *socket;
|
||||||
php_stream *stream = NULL;
|
php_stream *stream = NULL;
|
||||||
php_netstream_data_t *stream_data;
|
php_netstream_data_t *stream_data;
|
||||||
char *protocol = NULL;
|
const char *protocol = NULL;
|
||||||
size_t protocollen = 0;
|
size_t protocollen = 0;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &zsocket, socket_ce) == FAILURE) {
|
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &zsocket, socket_ce) == FAILURE) {
|
||||||
|
@ -2287,12 +2287,12 @@ PHP_FUNCTION(socket_export_stream)
|
||||||
if (protoid == IPPROTO_TCP)
|
if (protoid == IPPROTO_TCP)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
protocol = "tcp";
|
protocol = "tcp://";
|
||||||
protocollen = 3;
|
protocollen = sizeof("tcp://") - 1;
|
||||||
}
|
}
|
||||||
} else if (protoid == SOCK_DGRAM) {
|
} else if (protoid == SOCK_DGRAM) {
|
||||||
protocol = "udp";
|
protocol = "udp://";
|
||||||
protocollen = 3;
|
protocollen = sizeof("udp://") - 1;
|
||||||
}
|
}
|
||||||
#ifdef PF_UNIX
|
#ifdef PF_UNIX
|
||||||
} else if (socket->type == PF_UNIX) {
|
} else if (socket->type == PF_UNIX) {
|
||||||
|
@ -2302,11 +2302,11 @@ PHP_FUNCTION(socket_export_stream)
|
||||||
getsockopt(socket->bsd_socket, SOL_SOCKET, SO_TYPE, (char *) &type, &typelen);
|
getsockopt(socket->bsd_socket, SOL_SOCKET, SO_TYPE, (char *) &type, &typelen);
|
||||||
|
|
||||||
if (type == SOCK_STREAM) {
|
if (type == SOCK_STREAM) {
|
||||||
protocol = "unix";
|
protocol = "unix://";
|
||||||
protocollen = 4;
|
protocollen = sizeof("unix://") - 1;
|
||||||
} else if (type == SOCK_DGRAM) {
|
} else if (type == SOCK_DGRAM) {
|
||||||
protocol = "udg";
|
protocol = "udg://";
|
||||||
protocollen = 3;
|
protocollen = sizeof("udg://") - 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
12
ext/sockets/tests/bug_export_stream_type.phpt
Normal file
12
ext/sockets/tests/bug_export_stream_type.phpt
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
--TEST--
|
||||||
|
Bug - socket_export_stream() with wrong protocol
|
||||||
|
--EXTENSIONS--
|
||||||
|
sockets
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
$sock = socket_create(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
$stream = socket_export_stream($sock);
|
||||||
|
echo stream_get_meta_data($stream)['stream_type']. "\n";
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
udp_socket
|
Loading…
Add table
Add a link
Reference in a new issue