From b5da98b9723cbccc79518592a49b2c70ee2024fe Mon Sep 17 00:00:00 2001 From: twosee Date: Thu, 28 Sep 2023 02:17:47 +0800 Subject: [PATCH] Fix socket_export_stream() with wrong protocol Closes GH-12310. --- NEWS | 3 +++ ext/sockets/sockets.c | 18 +++++++++--------- ext/sockets/tests/bug_export_stream_type.phpt | 12 ++++++++++++ 3 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 ext/sockets/tests/bug_export_stream_type.phpt diff --git a/NEWS b/NEWS index 15b6a94e0c3..36633a64524 100644 --- a/NEWS +++ b/NEWS @@ -59,6 +59,9 @@ PHP NEWS . Fix return type of stub of xml_parse_into_struct(). (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 - Core: diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index 4b269d8cb0d..fb7b464c31b 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -2251,7 +2251,7 @@ PHP_FUNCTION(socket_export_stream) php_socket *socket; php_stream *stream = NULL; php_netstream_data_t *stream_data; - char *protocol = NULL; + const char *protocol = NULL; size_t protocollen = 0; 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) #endif { - protocol = "tcp"; - protocollen = 3; + protocol = "tcp://"; + protocollen = sizeof("tcp://") - 1; } } else if (protoid == SOCK_DGRAM) { - protocol = "udp"; - protocollen = 3; + protocol = "udp://"; + protocollen = sizeof("udp://") - 1; } #ifdef 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); if (type == SOCK_STREAM) { - protocol = "unix"; - protocollen = 4; + protocol = "unix://"; + protocollen = sizeof("unix://") - 1; } else if (type == SOCK_DGRAM) { - protocol = "udg"; - protocollen = 3; + protocol = "udg://"; + protocollen = sizeof("udg://") - 1; } #endif } diff --git a/ext/sockets/tests/bug_export_stream_type.phpt b/ext/sockets/tests/bug_export_stream_type.phpt new file mode 100644 index 00000000000..b9dcbf63ce7 --- /dev/null +++ b/ext/sockets/tests/bug_export_stream_type.phpt @@ -0,0 +1,12 @@ +--TEST-- +Bug - socket_export_stream() with wrong protocol +--EXTENSIONS-- +sockets +--FILE-- + +--EXPECT-- +udp_socket