Skip to content

Commit 8ac3513

Browse files
committed
simplifying socket_addrinfo_bind/connect as we can assume the family is correct.
1 parent a1544a5 commit 8ac3513

File tree

1 file changed

+6
-53
lines changed

1 file changed

+6
-53
lines changed

ext/sockets/sockets.c

Lines changed: 6 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2830,7 +2830,6 @@ PHP_FUNCTION(socket_addrinfo_lookup)
28302830
PHP_FUNCTION(socket_addrinfo_bind)
28312831
{
28322832
zval *arg1;
2833-
int retval;
28342833
php_addrinfo *ai;
28352834
php_socket *php_sock;
28362835

@@ -2840,6 +2839,8 @@ PHP_FUNCTION(socket_addrinfo_bind)
28402839

28412840
ai = Z_ADDRESS_INFO_P(arg1);
28422841

2842+
ZEND_ASSERT(ai->addrinfo.ai_family == AF_INET || ai->addrinfo.ai_family == AF_INET6);
2843+
28432844
PHP_ETH_PROTO_CHECK(ai->addrinfo.ai_protocol, ai->addrinfo.ai_family);
28442845

28452846
object_init_ex(return_value, socket_ce);
@@ -2858,32 +2859,7 @@ PHP_FUNCTION(socket_addrinfo_bind)
28582859
php_sock->error = 0;
28592860
php_sock->blocking = 1;
28602861

2861-
switch(php_sock->type) {
2862-
// ZEND_ASSERT ? Addrinfo being opaque read-only, should not happen with previous change
2863-
case AF_UNIX:
2864-
{
2865-
// AF_UNIX sockets via getaddrino are not implemented due to security problems
2866-
close(php_sock->bsd_socket);
2867-
zval_ptr_dtor(return_value);
2868-
RETURN_FALSE;
2869-
}
2870-
2871-
case AF_INET:
2872-
#ifdef HAVE_IPV6
2873-
case AF_INET6:
2874-
#endif
2875-
{
2876-
retval = bind(php_sock->bsd_socket, ai->addrinfo.ai_addr, ai->addrinfo.ai_addrlen);
2877-
break;
2878-
}
2879-
default:
2880-
close(php_sock->bsd_socket);
2881-
zval_ptr_dtor(return_value);
2882-
zend_argument_value_error(1, "must be one of AF_UNIX, AF_INET, or AF_INET6");
2883-
RETURN_THROWS();
2884-
}
2885-
2886-
if (retval != 0) {
2862+
if (bind(php_sock->bsd_socket, ai->addrinfo.ai_addr, ai->addrinfo.ai_addrlen) != 0) {
28872863
PHP_SOCKET_ERROR(php_sock, "Unable to bind address", errno);
28882864
close(php_sock->bsd_socket);
28892865
zval_ptr_dtor(return_value);
@@ -2896,7 +2872,6 @@ PHP_FUNCTION(socket_addrinfo_bind)
28962872
PHP_FUNCTION(socket_addrinfo_connect)
28972873
{
28982874
zval *arg1;
2899-
int retval;
29002875
php_addrinfo *ai;
29012876
php_socket *php_sock;
29022877

@@ -2906,6 +2881,8 @@ PHP_FUNCTION(socket_addrinfo_connect)
29062881

29072882
ai = Z_ADDRESS_INFO_P(arg1);
29082883

2884+
ZEND_ASSERT(ai->addrinfo.ai_family == AF_INET || ai->addrinfo.ai_family == AF_INET6);
2885+
29092886
PHP_ETH_PROTO_CHECK(ai->addrinfo.ai_protocol, ai->addrinfo.ai_family);
29102887

29112888
object_init_ex(return_value, socket_ce);
@@ -2924,31 +2901,7 @@ PHP_FUNCTION(socket_addrinfo_connect)
29242901
php_sock->error = 0;
29252902
php_sock->blocking = 1;
29262903

2927-
switch(php_sock->type) {
2928-
case AF_UNIX:
2929-
{
2930-
// AF_UNIX sockets via getaddrino are not implemented due to security problems
2931-
close(php_sock->bsd_socket);
2932-
zval_ptr_dtor(return_value);
2933-
RETURN_FALSE;
2934-
}
2935-
2936-
case AF_INET:
2937-
#ifdef HAVE_IPV6
2938-
case AF_INET6:
2939-
#endif
2940-
{
2941-
retval = connect(php_sock->bsd_socket, ai->addrinfo.ai_addr, ai->addrinfo.ai_addrlen);
2942-
break;
2943-
}
2944-
default:
2945-
zend_argument_value_error(1, "socket type must be one of AF_UNIX, AF_INET, or AF_INET6");
2946-
close(php_sock->bsd_socket);
2947-
zval_ptr_dtor(return_value);
2948-
RETURN_THROWS();
2949-
}
2950-
2951-
if (retval != 0) {
2904+
if (connect(php_sock->bsd_socket, ai->addrinfo.ai_addr, ai->addrinfo.ai_addrlen) != 0) {
29522905
PHP_SOCKET_ERROR(php_sock, "Unable to connect address", errno);
29532906
close(php_sock->bsd_socket);
29542907
zval_ptr_dtor(return_value);

0 commit comments

Comments
 (0)