@@ -1741,7 +1741,7 @@ PHP_FUNCTION(socket_get_option)
17411741				RETURN_FALSE ;
17421742			}
17431743
1744- 			array_init (return_value );
1744+ 			array_init_size (return_value ,  2 );
17451745
17461746			add_assoc_string (return_value , "function_set_name" , tsf .function_set_name );
17471747			add_assoc_long (return_value , "pcbcnt" , tsf .pcbcnt );
@@ -1764,7 +1764,7 @@ PHP_FUNCTION(socket_get_option)
17641764					RETURN_FALSE ;
17651765				}
17661766
1767- 				array_init (return_value );
1767+ 				array_init_size (return_value ,  2 );
17681768				add_assoc_long (return_value , "l_onoff" , linger_val .l_onoff );
17691769				add_assoc_long (return_value , "l_linger" , linger_val .l_linger );
17701770				return ;
@@ -1786,7 +1786,7 @@ PHP_FUNCTION(socket_get_option)
17861786				tv .tv_usec  =  timeout  ? (long )((timeout  % 1000 ) *  1000 ) : 0 ;
17871787#endif 
17881788
1789- 				array_init (return_value );
1789+ 				array_init_size (return_value ,  2 );
17901790
17911791				add_assoc_long (return_value , "sec" , tv .tv_sec );
17921792				add_assoc_long (return_value , "usec" , tv .tv_usec );
@@ -1808,7 +1808,7 @@ PHP_FUNCTION(socket_get_option)
18081808					RETURN_FALSE ;
18091809				}
18101810
1811- 				array_init (return_value );
1811+ 				array_init_size (return_value ,  9 );
18121812
18131813				add_assoc_long (return_value , "rmem_alloc" , minfo [SK_MEMINFO_RMEM_ALLOC ]);
18141814				add_assoc_long (return_value , "rcvbuf" , minfo [SK_MEMINFO_RCVBUF ]);
@@ -1833,7 +1833,7 @@ PHP_FUNCTION(socket_get_option)
18331833					RETURN_FALSE ;
18341834				}
18351835
1836- 				array_init (return_value );
1836+ 				array_init_size (return_value ,  1 );
18371837
18381838				add_assoc_string (return_value , "af_name" , af .af_name );
18391839				return ;
@@ -1857,9 +1857,11 @@ PHP_FUNCTION(socket_get_option)
18571857					RETURN_FALSE ;
18581858				}
18591859
1860- 				array_init (return_value );
1860+ 				size_t  arrlen  =  optlen  / sizeof (struct  fil_info );
1861+ 
1862+ 				array_init_size (return_value , arrlen );
18611863
1862- 				for  (i  =  0 ; i  <  optlen  /  sizeof ( struct   fil_info ) ; i ++ ) {
1864+ 				for  (i  =  0 ; i  <  arrlen ; i ++ ) {
18631865					add_index_string (return_value , i , fi [i ].fi_name );
18641866				}
18651867
@@ -2589,7 +2591,13 @@ PHP_FUNCTION(socket_addrinfo_lookup)
25892591#  endif 
25902592#endif 
25912593
2592- 	if  (zhints  &&  !HT_IS_PACKED (Z_ARRVAL_P (zhints ))) {
2594+ 	if  (zhints ) {
2595+ 		if  (UNEXPECTED (HT_IS_PACKED (Z_ARRVAL_P (zhints )))) {
2596+ 			zend_argument_value_error (3 , "must only contain array keys \"ai_flags\", \"ai_socktype\", " 
2597+ 					"\"ai_protocol\", or \"ai_family\"" );
2598+ 			RETURN_THROWS ();
2599+ 		}
2600+ 
25932601		ZEND_HASH_MAP_FOREACH_STR_KEY_VAL (Z_ARRVAL_P (zhints ), key , hint ) {
25942602			if  (key ) {
25952603				bool  failed  =  false;
@@ -2639,9 +2647,13 @@ PHP_FUNCTION(socket_addrinfo_lookup)
26392647					hints .ai_family  =  (int )val ;
26402648				} else  {
26412649					zend_argument_value_error (3 , "must only contain array keys \"ai_flags\", \"ai_socktype\", " 
2642- 						"\"ai_protocol\", or \"ai_family\"" );
2650+ 							 "\"ai_protocol\", or \"ai_family\"" );
26432651					RETURN_THROWS ();
2644- 				}
2652+ 					}
2653+ 			} else  {
2654+ 				zend_argument_value_error (3 , "must only contain array keys \"ai_flags\", \"ai_socktype\", " 
2655+ 						"\"ai_protocol\", or \"ai_family\"" );
2656+ 				RETURN_THROWS ();
26452657			}
26462658		} ZEND_HASH_FOREACH_END ();
26472659	}
0 commit comments