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