From 001efd80b29063176b7095c05aa9c384b2996d44 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Gustavo=20Andr=C3=A9=20dos=20Santos=20Lopes?= Date: Sat, 26 Nov 2011 17:48:52 +0000 Subject: [PATCH] - Small ajustments to some multicast options. --- ext/sockets/sockets.c | 16 ++++ ext/sockets/tests/mcast_ipv4_send_error.phpt | 79 ++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 ext/sockets/tests/mcast_ipv4_send_error.phpt diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index 897c330841..6da5861907 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -2189,8 +2189,16 @@ PHP_FUNCTION(socket_set_option) goto dosockopt; case IP_MULTICAST_LOOP: + convert_to_boolean_ex(arg4); + goto ipv4_loop_ttl; case IP_MULTICAST_TTL: convert_to_long_ex(arg4); + if (Z_LVAL_PP(arg4) < 0L || Z_LVAL_PP(arg4) > 255L) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, + "Expected a value between 0 and 255"); + RETURN_FALSE; + } +ipv4_loop_ttl: ipv4_mcast_ttl_lback = (unsigned char) Z_LVAL_PP(arg4); opt_ptr = &ipv4_mcast_ttl_lback; optlen = sizeof(ipv4_mcast_ttl_lback); @@ -2225,8 +2233,16 @@ PHP_FUNCTION(socket_set_option) goto dosockopt; case IPV6_MULTICAST_LOOP: + convert_to_boolean_ex(arg4); + goto ipv6_loop_hops; case IPV6_MULTICAST_HOPS: convert_to_long_ex(arg4); + if (Z_LVAL_PP(arg4) < -1L || Z_LVAL_PP(arg4) > 255L) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, + "Expected a value between -1 and 255"); + RETURN_FALSE; + } +ipv6_loop_hops: ov = (int) Z_LVAL_PP(arg4); opt_ptr = &ov; optlen = sizeof(ov); diff --git a/ext/sockets/tests/mcast_ipv4_send_error.phpt b/ext/sockets/tests/mcast_ipv4_send_error.phpt new file mode 100644 index 0000000000..5cd3d8e7d7 --- /dev/null +++ b/ext/sockets/tests/mcast_ipv4_send_error.phpt @@ -0,0 +1,79 @@ +--TEST-- +Multicast support: IPv4 send options with unusual values +--SKIPIF-- +