@@ -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