From 8ecfdb7cf7f506da09fd1c6b9e87b58ac67fa82d Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sun, 29 Dec 2024 14:01:46 +0000 Subject: [PATCH] ext/sockets: socket_bind() check port validity. range from ephemeral port (0) to max unsigned 16 bits. --- ext/sockets/sockets.c | 5 ++++ .../tests/socket_bind_invalid_port.phpt | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 ext/sockets/tests/socket_bind_invalid_port.phpt diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index 3752ad15c9954..b2eddfba7e1e9 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -1288,6 +1288,11 @@ PHP_FUNCTION(socket_bind) php_sock = Z_SOCKET_P(arg1); ENSURE_SOCKET_VALID(php_sock); + if (port < 0 || port > USHRT_MAX) { + zend_argument_value_error(3, "must be between 0 and %u", USHRT_MAX); + RETURN_THROWS(); + } + switch(php_sock->type) { case AF_UNIX: { diff --git a/ext/sockets/tests/socket_bind_invalid_port.phpt b/ext/sockets/tests/socket_bind_invalid_port.phpt new file mode 100644 index 0000000000000..b70900f68620c --- /dev/null +++ b/ext/sockets/tests/socket_bind_invalid_port.phpt @@ -0,0 +1,23 @@ +--TEST-- +socket_bind() with invalid ports. +--EXTENSIONS-- +sockets +--FILE-- +getMessage() . PHP_EOL; + } + + try { + socket_bind($s_c, '0.0.0.0', 65536); + } catch (\ValueError $e) { + echo $e->getMessage() . PHP_EOL; + } +?> +--EXPECT-- +socket_bind(): Argument #3 ($port) must be between 0 and 65535 +socket_bind(): Argument #3 ($port) must be between 0 and 65535