@@ -2830,7 +2830,6 @@ PHP_FUNCTION(socket_addrinfo_lookup)
28302830PHP_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)
28962872PHP_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