From 26ef413210a9de085dc78846f727b74d3bc28a2c Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sun, 29 Dec 2024 13:56:45 +0000 Subject: [PATCH 1/2] ext/sockets: inet family conversions internal changes. --- ext/sockets/conversions.c | 8 ++----- ext/sockets/multicast.c | 2 +- ext/sockets/sockaddr_conv.c | 45 +++++++++++++++++++++---------------- ext/sockets/sockaddr_conv.h | 6 ++--- ext/sockets/sockets.c | 12 +++++----- 5 files changed, 38 insertions(+), 35 deletions(-) diff --git a/ext/sockets/conversions.c b/ext/sockets/conversions.c index 04dad88ac5915..e982a211787fb 100644 --- a/ext/sockets/conversions.c +++ b/ext/sockets/conversions.c @@ -550,13 +550,11 @@ static void to_zval_read_uid_t(const char *data, zval *zv, res_context *ctx) /* CONVERSIONS for sockaddr */ static void from_zval_write_sin_addr(const zval *zaddr_str, char *inaddr, ser_context *ctx) { - int res; struct sockaddr_in saddr = {0}; zend_string *addr_str, *tmp_addr_str; addr_str = zval_get_tmp_string((zval *) zaddr_str, &tmp_addr_str); - res = php_set_inet_addr(&saddr, ZSTR_VAL(addr_str), ctx->sock); - if (res) { + if (php_set_inet_addr(&saddr, ZSTR_VAL(addr_str), ctx->sock) == SUCCESS) { memcpy(inaddr, &saddr.sin_addr, sizeof saddr.sin_addr); } else { /* error already emitted, but let's emit another more relevant */ @@ -600,13 +598,11 @@ static void to_zval_read_sockaddr_in(const char *data, zval *zv, res_context *ct #ifdef HAVE_IPV6 static void from_zval_write_sin6_addr(const zval *zaddr_str, char *addr6, ser_context *ctx) { - int res; struct sockaddr_in6 saddr6 = {0}; zend_string *addr_str, *tmp_addr_str; addr_str = zval_get_tmp_string((zval *) zaddr_str, &tmp_addr_str); - res = php_set_inet6_addr(&saddr6, ZSTR_VAL(addr_str), ctx->sock); - if (res) { + if (php_set_inet6_addr(&saddr6, ZSTR_VAL(addr_str), ctx->sock) == SUCCESS) { memcpy(addr6, &saddr6.sin6_addr, sizeof saddr6.sin6_addr); } else { /* error already emitted, but let's emit another more relevant */ diff --git a/ext/sockets/multicast.c b/ext/sockets/multicast.c index e258ca3e66e96..b24f88df1c463 100644 --- a/ext/sockets/multicast.c +++ b/ext/sockets/multicast.c @@ -128,7 +128,7 @@ static zend_result php_get_address_from_array(const HashTable *ht, const char *k return FAILURE; } str = zval_get_tmp_string(val, &tmp_str); - if (!php_set_inet46_addr(ss, ss_len, ZSTR_VAL(str), sock)) { + if (php_set_inet46_addr(ss, ss_len, ZSTR_VAL(str), sock) == FAILURE) { zend_tmp_string_release(tmp_str); return FAILURE; } diff --git a/ext/sockets/sockaddr_conv.c b/ext/sockets/sockaddr_conv.c index d007bf4af2ed0..86e3a8fc9e856 100644 --- a/ext/sockets/sockaddr_conv.c +++ b/ext/sockets/sockaddr_conv.c @@ -13,7 +13,7 @@ extern zend_result php_string_to_if_index(const char *val, unsigned *out); #ifdef HAVE_IPV6 /* Sets addr by hostname, or by ip in string form (AF_INET6) */ -int php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_sock) /* {{{ */ +zend_result php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_sock) /* {{{ */ { struct in6_addr tmp; #ifdef HAVE_GETADDRINFO @@ -41,12 +41,12 @@ int php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_ #else PHP_SOCKET_ERROR(php_sock, "Host lookup failed", (-10000 - h_errno)); #endif - return 0; + return FAILURE; } if (addrinfo->ai_family != PF_INET6 || addrinfo->ai_addrlen != sizeof(struct sockaddr_in6)) { php_error_docref(NULL, E_WARNING, "Host lookup failed: Non AF_INET6 domain returned on AF_INET6 socket"); freeaddrinfo(addrinfo); - return 0; + return FAILURE; } memcpy(&(sin6->sin6_addr.s6_addr), ((struct sockaddr_in6*)(addrinfo->ai_addr))->sin6_addr.s6_addr, sizeof(struct in6_addr)); @@ -55,7 +55,7 @@ int php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_ #else /* No IPv6 specific hostname resolution is available on this system? */ php_error_docref(NULL, E_WARNING, "Host lookup failed: getaddrinfo() not available on this system"); - return 0; + return FAILURE; #endif } @@ -63,14 +63,21 @@ int php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_ if (scope) { zend_long lval = 0; double dval = 0; - unsigned scope_id = 0; - + uint32_t scope_id = 0; scope++; + if (*scope == '\0') { + zend_value_error("scope cannot be empty"); + return FAILURE; + } + + if (IS_LONG == is_numeric_string(scope, strlen(scope), &lval, &dval, 0)) { - if (lval > 0 && (zend_ulong)lval <= UINT_MAX) { - scope_id = lval; + if (lval <= 0 || (zend_ulong)lval > UINT_MAX) { + zend_value_error("scope must be between 1 and %u", UINT_MAX); + return FAILURE; } + scope_id = lval; } else { php_string_to_if_index(scope, &scope_id); } @@ -78,13 +85,13 @@ int php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_ sin6->sin6_scope_id = scope_id; } - return 1; + return SUCCESS; } /* }}} */ #endif /* Sets addr by hostname, or by ip in string form (AF_INET) */ -int php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_sock) /* {{{ */ +zend_result php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_sock) /* {{{ */ { struct in_addr tmp; struct hostent *host_entry; @@ -99,40 +106,40 @@ int php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_soc #else PHP_SOCKET_ERROR(php_sock, "Host lookup failed", (-10000 - h_errno)); #endif - return 0; + return FAILURE; } if (host_entry->h_addrtype != AF_INET) { php_error_docref(NULL, E_WARNING, "Host lookup failed: Non AF_INET domain returned on AF_INET socket"); - return 0; + return FAILURE; } memcpy(&(sin->sin_addr.s_addr), host_entry->h_addr_list[0], host_entry->h_length); } - return 1; + return SUCCESS; } /* }}} */ /* Sets addr by hostname or by ip in string form (AF_INET or AF_INET6, * depending on the socket) */ -int php_set_inet46_addr(php_sockaddr_storage *ss, socklen_t *ss_len, char *string, php_socket *php_sock) /* {{{ */ +zend_result php_set_inet46_addr(php_sockaddr_storage *ss, socklen_t *ss_len, char *string, php_socket *php_sock) /* {{{ */ { if (php_sock->type == AF_INET) { struct sockaddr_in t = {0}; - if (php_set_inet_addr(&t, string, php_sock)) { + if (php_set_inet_addr(&t, string, php_sock) == SUCCESS) { memcpy(ss, &t, sizeof t); ss->ss_family = AF_INET; *ss_len = sizeof(t); - return 1; + return SUCCESS; } } #ifdef HAVE_IPV6 else if (php_sock->type == AF_INET6) { struct sockaddr_in6 t = {0}; - if (php_set_inet6_addr(&t, string, php_sock)) { + if (php_set_inet6_addr(&t, string, php_sock) == SUCCESS) { memcpy(ss, &t, sizeof t); ss->ss_family = AF_INET6; *ss_len = sizeof(t); - return 1; + return SUCCESS; } } #endif @@ -140,5 +147,5 @@ int php_set_inet46_addr(php_sockaddr_storage *ss, socklen_t *ss_len, char *strin php_error_docref(NULL, E_WARNING, "IP address used in the context of an unexpected type of socket"); } - return 0; + return FAILURE; } diff --git a/ext/sockets/sockaddr_conv.h b/ext/sockets/sockaddr_conv.h index 1e7e3cf046d0a..237ad3c88660c 100644 --- a/ext/sockets/sockaddr_conv.h +++ b/ext/sockets/sockaddr_conv.h @@ -16,16 +16,16 @@ * The IPv6 literal can be a IPv4 mapped address (like ::ffff:127.0.0.1). * If the hostname yields no IPv6 addresses, a mapped IPv4 address may be returned (AI_V4MAPPED) */ -int php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_sock); +zend_result php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_sock); /* * Convert an IPv4 literal or a hostname into a sockaddr_in. */ -int php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_sock); +zend_result php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_sock); /* * Calls either php_set_inet6_addr() or php_set_inet_addr(), depending on the type of the socket. */ -int php_set_inet46_addr(php_sockaddr_storage *ss, socklen_t *ss_len, char *string, php_socket *php_sock); +zend_result php_set_inet46_addr(php_sockaddr_storage *ss, socklen_t *ss_len, char *string, php_socket *php_sock); #endif diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index b2eddfba7e1e9..9503f87ad0f3b 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -1192,7 +1192,7 @@ PHP_FUNCTION(socket_connect) sin6.sin6_family = AF_INET6; sin6.sin6_port = htons((unsigned short int)port); - if (! php_set_inet6_addr(&sin6, addr, php_sock)) { + if (php_set_inet6_addr(&sin6, addr, php_sock) == FAILURE) { RETURN_FALSE; } @@ -1211,7 +1211,7 @@ PHP_FUNCTION(socket_connect) sin.sin_family = AF_INET; sin.sin_port = htons((unsigned short int)port); - if (! php_set_inet_addr(&sin, addr, php_sock)) { + if (php_set_inet_addr(&sin, addr, php_sock) == FAILURE) { RETURN_FALSE; } @@ -1318,7 +1318,7 @@ PHP_FUNCTION(socket_bind) sa->sin_family = AF_INET; sa->sin_port = htons((unsigned short) port); - if (! php_set_inet_addr(sa, addr, php_sock)) { + if (php_set_inet_addr(sa, addr, php_sock) == FAILURE) { RETURN_FALSE; } @@ -1333,7 +1333,7 @@ PHP_FUNCTION(socket_bind) sa->sin6_family = AF_INET6; sa->sin6_port = htons((unsigned short) port); - if (! php_set_inet6_addr(sa, addr, php_sock)) { + if (php_set_inet6_addr(sa, addr, php_sock) == FAILURE) { RETURN_FALSE; } @@ -1610,7 +1610,7 @@ PHP_FUNCTION(socket_sendto) sin.sin_family = AF_INET; sin.sin_port = htons((unsigned short) port); - if (! php_set_inet_addr(&sin, addr, php_sock)) { + if (php_set_inet_addr(&sin, addr, php_sock) == FAILURE) { RETURN_FALSE; } @@ -1627,7 +1627,7 @@ PHP_FUNCTION(socket_sendto) sin6.sin6_family = AF_INET6; sin6.sin6_port = htons((unsigned short) port); - if (! php_set_inet6_addr(&sin6, addr, php_sock)) { + if (php_set_inet6_addr(&sin6, addr, php_sock) == FAILURE) { RETURN_FALSE; } From 99f91bc3787ac958cb7e5c12899facc84cd57533 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sun, 29 Dec 2024 17:14:04 +0000 Subject: [PATCH 2/2] changes from suggestions --- ext/sockets/conversions.c | 4 +- ext/sockets/multicast.c | 122 ++++++++++++++++++------------------ ext/sockets/multicast.h | 6 +- ext/sockets/sockaddr_conv.c | 34 +++++----- ext/sockets/sockaddr_conv.h | 6 +- ext/sockets/sockets.c | 14 ++--- 6 files changed, 92 insertions(+), 94 deletions(-) diff --git a/ext/sockets/conversions.c b/ext/sockets/conversions.c index e982a211787fb..96e88ef4fd374 100644 --- a/ext/sockets/conversions.c +++ b/ext/sockets/conversions.c @@ -554,7 +554,7 @@ static void from_zval_write_sin_addr(const zval *zaddr_str, char *inaddr, ser_co zend_string *addr_str, *tmp_addr_str; addr_str = zval_get_tmp_string((zval *) zaddr_str, &tmp_addr_str); - if (php_set_inet_addr(&saddr, ZSTR_VAL(addr_str), ctx->sock) == SUCCESS) { + if (php_set_inet_addr(&saddr, ZSTR_VAL(addr_str), ctx->sock)) { memcpy(inaddr, &saddr.sin_addr, sizeof saddr.sin_addr); } else { /* error already emitted, but let's emit another more relevant */ @@ -602,7 +602,7 @@ static void from_zval_write_sin6_addr(const zval *zaddr_str, char *addr6, ser_co zend_string *addr_str, *tmp_addr_str; addr_str = zval_get_tmp_string((zval *) zaddr_str, &tmp_addr_str); - if (php_set_inet6_addr(&saddr6, ZSTR_VAL(addr_str), ctx->sock) == SUCCESS) { + if (php_set_inet6_addr(&saddr6, ZSTR_VAL(addr_str), ctx->sock)) { memcpy(addr6, &saddr6.sin6_addr, sizeof saddr6.sin6_addr); } else { /* error already emitted, but let's emit another more relevant */ diff --git a/ext/sockets/multicast.c b/ext/sockets/multicast.c index b24f88df1c463..baf8bfb0d04cc 100644 --- a/ext/sockets/multicast.c +++ b/ext/sockets/multicast.c @@ -59,7 +59,7 @@ static const char *_php_source_op_to_string(enum source_op sop); static int _php_source_op_to_ipv4_op(enum source_op sop); #endif -zend_result php_string_to_if_index(const char *val, unsigned *out) +bool php_string_to_if_index(const char *val, unsigned *out) { #ifdef HAVE_IF_NAMETOINDEX unsigned int ind; @@ -68,30 +68,30 @@ zend_result php_string_to_if_index(const char *val, unsigned *out) if (ind == 0) { php_error_docref(NULL, E_WARNING, "No interface with name \"%s\" could be found", val); - return FAILURE; + return false; } else { *out = ind; - return SUCCESS; + return true; } #else php_error_docref(NULL, E_WARNING, "This platform does not support looking up an interface by " "name, an integer interface index must be supplied instead"); - return FAILURE; + return false; #endif } -static zend_result php_get_if_index_from_zval(zval *val, unsigned *out) +static bool php_get_if_index_from_zval(zval *val, unsigned *out) { - int ret; + bool ret = false; if (Z_TYPE_P(val) == IS_LONG) { if (Z_LVAL_P(val) < 0 || (zend_ulong)Z_LVAL_P(val) > UINT_MAX) { zend_value_error("Index must be between 0 and %u", UINT_MAX); - return FAILURE; + return ret; } *out = Z_LVAL_P(val); - ret = SUCCESS; + ret = true; } else { zend_string *tmp_str; zend_string *str = zval_get_tmp_string(val, &tmp_str); @@ -104,20 +104,20 @@ static zend_result php_get_if_index_from_zval(zval *val, unsigned *out) -static zend_result php_get_if_index_from_array(const HashTable *ht, const char *key, +static bool php_get_if_index_from_array(const HashTable *ht, const char *key, php_socket *sock, unsigned int *if_index) { zval *val; if ((val = zend_hash_str_find(ht, key, strlen(key))) == NULL) { *if_index = 0; /* default: 0 */ - return SUCCESS; + return true; } return php_get_if_index_from_zval(val, if_index); } -static zend_result php_get_address_from_array(const HashTable *ht, const char *key, +static bool php_get_address_from_array(const HashTable *ht, const char *key, php_socket *sock, php_sockaddr_storage *ss, socklen_t *ss_len) { zval *val; @@ -125,18 +125,18 @@ static zend_result php_get_address_from_array(const HashTable *ht, const char *k if ((val = zend_hash_str_find(ht, key, strlen(key))) == NULL) { zend_value_error("No key \"%s\" passed in optval", key); - return FAILURE; + return false; } str = zval_get_tmp_string(val, &tmp_str); - if (php_set_inet46_addr(ss, ss_len, ZSTR_VAL(str), sock) == FAILURE) { + if (!php_set_inet46_addr(ss, ss_len, ZSTR_VAL(str), sock)) { zend_tmp_string_release(tmp_str); - return FAILURE; + return false; } zend_tmp_string_release(tmp_str); - return SUCCESS; + return true; } -static zend_result php_do_mcast_opt(php_socket *php_sock, int level, int optname, zval *arg4) +static bool php_do_mcast_opt(php_socket *php_sock, int level, int optname, zval *arg4) { HashTable *opt_ht; unsigned int if_index; @@ -162,13 +162,13 @@ mcast_req_fun: ; convert_to_array(arg4); opt_ht = Z_ARRVAL_P(arg4); - if (php_get_address_from_array(opt_ht, "group", php_sock, &group, - &glen) == FAILURE) { - return FAILURE; + if (!php_get_address_from_array(opt_ht, "group", php_sock, &group, + &glen)) { + return false; } - if (php_get_if_index_from_array(opt_ht, "interface", php_sock, - &if_index) == FAILURE) { - return FAILURE; + if (!php_get_if_index_from_array(opt_ht, "interface", php_sock, + &if_index)) { + return false; } retval = mcast_req_fun(php_sock, level, (struct sockaddr*)&group, @@ -198,17 +198,17 @@ mcast_req_fun: ; convert_to_array(arg4); opt_ht = Z_ARRVAL_P(arg4); - if (php_get_address_from_array(opt_ht, "group", php_sock, &group, - &glen) == FAILURE) { - return FAILURE; + if (!php_get_address_from_array(opt_ht, "group", php_sock, &group, + &glen)) { + return false; } - if (php_get_address_from_array(opt_ht, "source", php_sock, &source, - &slen) == FAILURE) { - return FAILURE; + if (!php_get_address_from_array(opt_ht, "source", php_sock, &source, + &slen)) { + return false; } - if (php_get_if_index_from_array(opt_ht, "interface", php_sock, - &if_index) == FAILURE) { - return FAILURE; + if (!php_get_if_index_from_array(opt_ht, "interface", php_sock, + &if_index)) { + return false; } retval = mcast_sreq_fun(php_sock, level, (struct sockaddr*)&group, @@ -220,16 +220,16 @@ mcast_req_fun: ; php_error_docref(NULL, E_WARNING, "Unexpected option in php_do_mcast_opt (level %d, option %d). " "This is a bug.", level, optname); - return FAILURE; + return false; } if (retval != 0) { if (retval != -2) { /* error, but message already emitted */ PHP_SOCKET_ERROR(php_sock, "Unable to set socket option", errno); } - return FAILURE; + return false; } - return SUCCESS; + return true; } int php_do_setsockopt_ip_mcast(php_socket *php_sock, @@ -253,18 +253,18 @@ int php_do_setsockopt_ip_mcast(php_socket *php_sock, case PHP_MCAST_JOIN_SOURCE_GROUP: case PHP_MCAST_LEAVE_SOURCE_GROUP: #endif - if (php_do_mcast_opt(php_sock, level, optname, arg4) == FAILURE) { + if (!php_do_mcast_opt(php_sock, level, optname, arg4)) { return FAILURE; } else { return SUCCESS; } case IP_MULTICAST_IF: - if (php_get_if_index_from_zval(arg4, &if_index) == FAILURE) { + if (!php_get_if_index_from_zval(arg4, &if_index)) { return FAILURE; } - if (php_if_index_to_addr4(if_index, php_sock, &if_addr) == FAILURE) { + if (!php_if_index_to_addr4(if_index, php_sock, &if_addr)) { return FAILURE; } opt_ptr = &if_addr; @@ -321,14 +321,14 @@ int php_do_setsockopt_ipv6_mcast(php_socket *php_sock, case PHP_MCAST_JOIN_SOURCE_GROUP: case PHP_MCAST_LEAVE_SOURCE_GROUP: #endif - if (php_do_mcast_opt(php_sock, level, optname, arg4) == FAILURE) { + if (!php_do_mcast_opt(php_sock, level, optname, arg4)) { return FAILURE; } else { return SUCCESS; } case IPV6_MULTICAST_IF: - if (php_get_if_index_from_zval(arg4, &if_index) == FAILURE) { + if (!php_get_if_index_from_zval(arg4, &if_index)) { return FAILURE; } @@ -463,8 +463,7 @@ static int _php_mcast_join_leave( assert(group_len == sizeof(struct sockaddr_in)); if (if_index != 0) { - if (php_if_index_to_addr4(if_index, sock, &addr) == - FAILURE) + if (!php_if_index_to_addr4(if_index, sock, &addr)) return -2; /* failure, but notice already emitted */ mreq.imr_interface = addr; } else { @@ -532,8 +531,7 @@ static int _php_mcast_source_op( assert(source_len == sizeof(struct sockaddr_in)); if (if_index != 0) { - if (php_if_index_to_addr4(if_index, sock, &addr) == - FAILURE) + if (!php_if_index_to_addr4(if_index, sock, &addr)) return -2; /* failure, but notice already emitted */ mreqs.imr_interface = addr; } else { @@ -616,7 +614,7 @@ static int _php_source_op_to_ipv4_op(enum source_op sop) #endif /* HAS_MCAST_EXT */ #ifdef PHP_WIN32 -zend_result php_if_index_to_addr4(unsigned if_index, php_socket *php_sock, struct in_addr *out_addr) +bool php_if_index_to_addr4(unsigned if_index, php_socket *php_sock, struct in_addr *out_addr) { MIB_IPADDRTABLE *addr_table; ULONG size; @@ -627,7 +625,7 @@ zend_result php_if_index_to_addr4(unsigned if_index, php_socket *php_sock, struc if (if_index == 0) { out_addr->s_addr = INADDR_ANY; - return SUCCESS; + return true; } size = 4 * (sizeof *addr_table); @@ -642,23 +640,23 @@ zend_result php_if_index_to_addr4(unsigned if_index, php_socket *php_sock, struc efree(addr_table); php_error_docref(NULL, E_WARNING, "GetIpAddrTable failed with error %lu", retval); - return FAILURE; + return false; } for (i = 0; i < addr_table->dwNumEntries; i++) { MIB_IPADDRROW r = addr_table->table[i]; if (r.dwIndex == if_index) { out_addr->s_addr = r.dwAddr; efree(addr_table); - return SUCCESS; + return true; } } efree(addr_table); php_error_docref(NULL, E_WARNING, "No interface with index %u was found", if_index); - return FAILURE; + return false; } -zend_result php_add4_to_if_index(struct in_addr *addr, php_socket *php_sock, unsigned *if_index) +bool php_add4_to_if_index(struct in_addr *addr, php_socket *php_sock, unsigned *if_index) { MIB_IPADDRTABLE *addr_table; ULONG size; @@ -669,7 +667,7 @@ zend_result php_add4_to_if_index(struct in_addr *addr, php_socket *php_sock, uns if (addr->s_addr == INADDR_ANY) { *if_index = 0; - return SUCCESS; + return true; } size = 4 * (sizeof *addr_table); @@ -684,14 +682,14 @@ zend_result php_add4_to_if_index(struct in_addr *addr, php_socket *php_sock, uns efree(addr_table); php_error_docref(NULL, E_WARNING, "GetIpAddrTable failed with error %lu", retval); - return FAILURE; + return false; } for (i = 0; i < addr_table->dwNumEntries; i++) { MIB_IPADDRROW r = addr_table->table[i]; if (r.dwAddr == addr->s_addr) { *if_index = r.dwIndex; efree(addr_table); - return SUCCESS; + return true; } } efree(addr_table); @@ -702,18 +700,18 @@ zend_result php_add4_to_if_index(struct in_addr *addr, php_socket *php_sock, uns php_error_docref(NULL, E_WARNING, "The interface with IP address %s was not found", addr_str); } - return FAILURE; + return false; } #else -zend_result php_if_index_to_addr4(unsigned if_index, php_socket *php_sock, struct in_addr *out_addr) +bool php_if_index_to_addr4(unsigned if_index, php_socket *php_sock, struct in_addr *out_addr) { struct ifreq if_req; if (if_index == 0) { out_addr->s_addr = INADDR_ANY; - return SUCCESS; + return true; } #if !defined(ifr_ifindex) && (defined(ifr_index) || defined(__HAIKU__)) @@ -730,21 +728,21 @@ zend_result php_if_index_to_addr4(unsigned if_index, php_socket *php_sock, struc #endif php_error_docref(NULL, E_WARNING, "Failed obtaining address for interface %u: error %d", if_index, errno); - return FAILURE; + return false; } if (ioctl(php_sock->bsd_socket, SIOCGIFADDR, &if_req) == -1) { php_error_docref(NULL, E_WARNING, "Failed obtaining address for interface %u: error %d", if_index, errno); - return FAILURE; + return false; } memcpy(out_addr, &((struct sockaddr_in *) &if_req.ifr_addr)->sin_addr, sizeof *out_addr); - return SUCCESS; + return true; } -zend_result php_add4_to_if_index(struct in_addr *addr, php_socket *php_sock, unsigned *if_index) +bool php_add4_to_if_index(struct in_addr *addr, php_socket *php_sock, unsigned *if_index) { struct ifconf if_conf = {0}; char *buf = NULL, @@ -755,7 +753,7 @@ zend_result php_add4_to_if_index(struct in_addr *addr, php_socket *php_sock, uns if (addr->s_addr == INADDR_ANY) { *if_index = 0; - return SUCCESS; + return true; } for(;;) { @@ -819,7 +817,7 @@ zend_result php_add4_to_if_index(struct in_addr *addr, php_socket *php_sock, uns *if_index = index_tmp; #endif efree(buf); - return SUCCESS; + return true; } } } @@ -834,6 +832,6 @@ zend_result php_add4_to_if_index(struct in_addr *addr, php_socket *php_sock, uns err: if (buf != NULL) efree(buf); - return FAILURE; + return false; } #endif diff --git a/ext/sockets/multicast.h b/ext/sockets/multicast.h index f2232921c6b93..f9f5fa0d4dc6e 100644 --- a/ext/sockets/multicast.h +++ b/ext/sockets/multicast.h @@ -52,17 +52,17 @@ int php_do_setsockopt_ipv6_mcast(php_socket *php_sock, int optname, zval *arg4); -zend_result php_if_index_to_addr4( +bool php_if_index_to_addr4( unsigned if_index, php_socket *php_sock, struct in_addr *out_addr); -zend_result php_add4_to_if_index( +bool php_add4_to_if_index( struct in_addr *addr, php_socket *php_sock, unsigned *if_index); -zend_result php_string_to_if_index(const char *val, unsigned *out); +bool php_string_to_if_index(const char *val, unsigned *out); int php_mcast_join( php_socket *sock, diff --git a/ext/sockets/sockaddr_conv.c b/ext/sockets/sockaddr_conv.c index 86e3a8fc9e856..3190df52eb255 100644 --- a/ext/sockets/sockaddr_conv.c +++ b/ext/sockets/sockaddr_conv.c @@ -13,7 +13,7 @@ extern zend_result php_string_to_if_index(const char *val, unsigned *out); #ifdef HAVE_IPV6 /* Sets addr by hostname, or by ip in string form (AF_INET6) */ -zend_result php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_sock) /* {{{ */ +bool php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_sock) /* {{{ */ { struct in6_addr tmp; #ifdef HAVE_GETADDRINFO @@ -41,12 +41,12 @@ zend_result php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_sock #else PHP_SOCKET_ERROR(php_sock, "Host lookup failed", (-10000 - h_errno)); #endif - return FAILURE; + return false; } if (addrinfo->ai_family != PF_INET6 || addrinfo->ai_addrlen != sizeof(struct sockaddr_in6)) { php_error_docref(NULL, E_WARNING, "Host lookup failed: Non AF_INET6 domain returned on AF_INET6 socket"); freeaddrinfo(addrinfo); - return FAILURE; + return false; } memcpy(&(sin6->sin6_addr.s6_addr), ((struct sockaddr_in6*)(addrinfo->ai_addr))->sin6_addr.s6_addr, sizeof(struct in6_addr)); @@ -55,7 +55,7 @@ zend_result php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_sock #else /* No IPv6 specific hostname resolution is available on this system? */ php_error_docref(NULL, E_WARNING, "Host lookup failed: getaddrinfo() not available on this system"); - return FAILURE; + return false; #endif } @@ -68,14 +68,14 @@ zend_result php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_sock if (*scope == '\0') { zend_value_error("scope cannot be empty"); - return FAILURE; + return false; } if (IS_LONG == is_numeric_string(scope, strlen(scope), &lval, &dval, 0)) { if (lval <= 0 || (zend_ulong)lval > UINT_MAX) { zend_value_error("scope must be between 1 and %u", UINT_MAX); - return FAILURE; + return false; } scope_id = lval; } else { @@ -85,13 +85,13 @@ zend_result php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_sock sin6->sin6_scope_id = scope_id; } - return SUCCESS; + return true; } /* }}} */ #endif /* Sets addr by hostname, or by ip in string form (AF_INET) */ -zend_result php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_sock) /* {{{ */ +bool php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_sock) /* {{{ */ { struct in_addr tmp; struct hostent *host_entry; @@ -106,40 +106,40 @@ zend_result php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket #else PHP_SOCKET_ERROR(php_sock, "Host lookup failed", (-10000 - h_errno)); #endif - return FAILURE; + return false; } if (host_entry->h_addrtype != AF_INET) { php_error_docref(NULL, E_WARNING, "Host lookup failed: Non AF_INET domain returned on AF_INET socket"); - return FAILURE; + return false; } memcpy(&(sin->sin_addr.s_addr), host_entry->h_addr_list[0], host_entry->h_length); } - return SUCCESS; + return true; } /* }}} */ /* Sets addr by hostname or by ip in string form (AF_INET or AF_INET6, * depending on the socket) */ -zend_result php_set_inet46_addr(php_sockaddr_storage *ss, socklen_t *ss_len, char *string, php_socket *php_sock) /* {{{ */ +bool php_set_inet46_addr(php_sockaddr_storage *ss, socklen_t *ss_len, char *string, php_socket *php_sock) /* {{{ */ { if (php_sock->type == AF_INET) { struct sockaddr_in t = {0}; - if (php_set_inet_addr(&t, string, php_sock) == SUCCESS) { + if (php_set_inet_addr(&t, string, php_sock)) { memcpy(ss, &t, sizeof t); ss->ss_family = AF_INET; *ss_len = sizeof(t); - return SUCCESS; + return true; } } #ifdef HAVE_IPV6 else if (php_sock->type == AF_INET6) { struct sockaddr_in6 t = {0}; - if (php_set_inet6_addr(&t, string, php_sock) == SUCCESS) { + if (php_set_inet6_addr(&t, string, php_sock)) { memcpy(ss, &t, sizeof t); ss->ss_family = AF_INET6; *ss_len = sizeof(t); - return SUCCESS; + return true; } } #endif @@ -147,5 +147,5 @@ zend_result php_set_inet46_addr(php_sockaddr_storage *ss, socklen_t *ss_len, cha php_error_docref(NULL, E_WARNING, "IP address used in the context of an unexpected type of socket"); } - return FAILURE; + return false; } diff --git a/ext/sockets/sockaddr_conv.h b/ext/sockets/sockaddr_conv.h index 237ad3c88660c..50de76713690c 100644 --- a/ext/sockets/sockaddr_conv.h +++ b/ext/sockets/sockaddr_conv.h @@ -16,16 +16,16 @@ * The IPv6 literal can be a IPv4 mapped address (like ::ffff:127.0.0.1). * If the hostname yields no IPv6 addresses, a mapped IPv4 address may be returned (AI_V4MAPPED) */ -zend_result php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_sock); +bool php_set_inet6_addr(struct sockaddr_in6 *sin6, char *string, php_socket *php_sock); /* * Convert an IPv4 literal or a hostname into a sockaddr_in. */ -zend_result php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_sock); +bool php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_sock); /* * Calls either php_set_inet6_addr() or php_set_inet_addr(), depending on the type of the socket. */ -zend_result php_set_inet46_addr(php_sockaddr_storage *ss, socklen_t *ss_len, char *string, php_socket *php_sock); +bool php_set_inet46_addr(php_sockaddr_storage *ss, socklen_t *ss_len, char *string, php_socket *php_sock); #endif diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index 9503f87ad0f3b..83ed6f169fd8d 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -1192,7 +1192,7 @@ PHP_FUNCTION(socket_connect) sin6.sin6_family = AF_INET6; sin6.sin6_port = htons((unsigned short int)port); - if (php_set_inet6_addr(&sin6, addr, php_sock) == FAILURE) { + if (!php_set_inet6_addr(&sin6, addr, php_sock)) { RETURN_FALSE; } @@ -1211,7 +1211,7 @@ PHP_FUNCTION(socket_connect) sin.sin_family = AF_INET; sin.sin_port = htons((unsigned short int)port); - if (php_set_inet_addr(&sin, addr, php_sock) == FAILURE) { + if (!php_set_inet_addr(&sin, addr, php_sock)) { RETURN_FALSE; } @@ -1318,7 +1318,7 @@ PHP_FUNCTION(socket_bind) sa->sin_family = AF_INET; sa->sin_port = htons((unsigned short) port); - if (php_set_inet_addr(sa, addr, php_sock) == FAILURE) { + if (!php_set_inet_addr(sa, addr, php_sock)) { RETURN_FALSE; } @@ -1333,7 +1333,7 @@ PHP_FUNCTION(socket_bind) sa->sin6_family = AF_INET6; sa->sin6_port = htons((unsigned short) port); - if (php_set_inet6_addr(sa, addr, php_sock) == FAILURE) { + if (!php_set_inet6_addr(sa, addr, php_sock)) { RETURN_FALSE; } @@ -1610,7 +1610,7 @@ PHP_FUNCTION(socket_sendto) sin.sin_family = AF_INET; sin.sin_port = htons((unsigned short) port); - if (php_set_inet_addr(&sin, addr, php_sock) == FAILURE) { + if (!php_set_inet_addr(&sin, addr, php_sock)) { RETURN_FALSE; } @@ -1627,7 +1627,7 @@ PHP_FUNCTION(socket_sendto) sin6.sin6_family = AF_INET6; sin6.sin6_port = htons((unsigned short) port); - if (php_set_inet6_addr(&sin6, addr, php_sock) == FAILURE) { + if (!php_set_inet6_addr(&sin6, addr, php_sock)) { RETURN_FALSE; } @@ -1683,7 +1683,7 @@ PHP_FUNCTION(socket_get_option) PHP_SOCKET_ERROR(php_sock, "Unable to retrieve socket option", errno); RETURN_FALSE; } - if (php_add4_to_if_index(&if_addr, php_sock, &if_index) == SUCCESS) { + if (php_add4_to_if_index(&if_addr, php_sock, &if_index)) { RETURN_LONG((zend_long) if_index); } else { RETURN_FALSE;