@@ -1811,7 +1811,7 @@ PHP_FUNCTION(socket_set_option)
1811
1811
HashTable * opt_ht ;
1812
1812
zval * l_onoff , * l_linger ;
1813
1813
zval * sec , * usec ;
1814
- bool failed ;
1814
+ bool failed ;
1815
1815
1816
1816
if (zend_parse_parameters (ZEND_NUM_ARGS (), "Ollz" , & arg1 , socket_ce , & level , & optname , & arg4 ) == FAILURE ) {
1817
1817
RETURN_THROWS ();
@@ -1872,6 +1872,11 @@ PHP_FUNCTION(socket_set_option)
1872
1872
const char l_onoff_key [] = "l_onoff" ;
1873
1873
const char l_linger_key [] = "l_linger" ;
1874
1874
1875
+ if (Z_TYPE_P (arg4 ) != IS_ARRAY ) {
1876
+ zend_argument_type_error (4 , "must be of type array, %s given" , zend_zval_value_name (arg4 ));
1877
+ RETURN_THROWS ();
1878
+ }
1879
+
1875
1880
convert_to_array (arg4 );
1876
1881
opt_ht = Z_ARRVAL_P (arg4 );
1877
1882
@@ -1886,12 +1891,22 @@ PHP_FUNCTION(socket_set_option)
1886
1891
1887
1892
zend_long zl_onoff = zval_try_get_long (l_onoff , & failed );
1888
1893
if (failed ) {
1889
- zend_argument_type_error (4 , "\"%s\" must be an int, %s given" , l_onoff_key , zend_zval_value_name (l_onoff ));
1894
+ zend_argument_type_error (4 , "\"%s\" must be of type int, %s given" , l_onoff_key , zend_zval_value_name (l_onoff ));
1890
1895
RETURN_THROWS ();
1891
1896
}
1892
1897
zend_long zl_linger = zval_try_get_long (l_linger , & failed );
1893
1898
if (failed ) {
1894
- zend_argument_type_error (4 , "\"%s\" must be an int, %s given" , l_linger_key , zend_zval_value_name (l_linger ));
1899
+ zend_argument_type_error (4 , "\"%s\" must be of type int, %s given" , l_linger_key , zend_zval_value_name (l_linger ));
1900
+ RETURN_THROWS ();
1901
+ }
1902
+
1903
+ if (zl_onoff < 0 || zl_onoff > USHRT_MAX ) {
1904
+ zend_argument_value_error (4 , "\"%s\" must be between 0 and %u" , l_onoff_key , USHRT_MAX );
1905
+ RETURN_THROWS ();
1906
+ }
1907
+
1908
+ if (zl_linger < 0 || zl_linger > USHRT_MAX ) {
1909
+ zend_argument_value_error (4 , "\"%s\" must be between 0 and %d" , l_linger , USHRT_MAX );
1895
1910
RETURN_THROWS ();
1896
1911
}
1897
1912
@@ -1907,7 +1922,11 @@ PHP_FUNCTION(socket_set_option)
1907
1922
case SO_SNDTIMEO : {
1908
1923
const char sec_key [] = "sec" ;
1909
1924
const char usec_key [] = "usec" ;
1910
- bool failed ;
1925
+
1926
+ if (Z_TYPE_P (arg4 ) != IS_ARRAY ) {
1927
+ zend_argument_type_error (4 , "must be of type array, %s given" , zend_zval_value_name (arg4 ));
1928
+ RETURN_THROWS ();
1929
+ }
1911
1930
1912
1931
convert_to_array (arg4 );
1913
1932
opt_ht = Z_ARRVAL_P (arg4 );
@@ -1923,12 +1942,12 @@ PHP_FUNCTION(socket_set_option)
1923
1942
1924
1943
zend_long zsec = zval_try_get_long (sec , & failed );
1925
1944
if (failed ) {
1926
- zend_argument_type_error (4 , "\"%s\" must be an int, %s given" , sec_key , zend_zval_value_name (sec ));
1945
+ zend_argument_type_error (4 , "\"%s\" must be of type int, %s given" , sec_key , zend_zval_value_name (sec ));
1927
1946
RETURN_THROWS ();
1928
1947
}
1929
1948
zend_long zusec = zval_try_get_long (usec , & failed );
1930
1949
if (failed ) {
1931
- zend_argument_type_error (4 , "\"%s\" must be an int, %s given" , usec_key , zend_zval_value_name (usec ));
1950
+ zend_argument_type_error (4 , "\"%s\" must be of type int, %s given" , usec_key , zend_zval_value_name (usec ));
1932
1951
RETURN_THROWS ();
1933
1952
}
1934
1953
#ifndef PHP_WIN32
@@ -1991,7 +2010,7 @@ PHP_FUNCTION(socket_set_option)
1991
2010
case SO_ATTACH_REUSEPORT_CBPF : {
1992
2011
zend_long fval = zval_try_get_long (arg4 , & failed );
1993
2012
if (failed ) {
1994
- zend_argument_type_error (4 , "must be an int, %s given" , zend_zval_value_name (arg4 ));
2013
+ zend_argument_type_error (4 , "must be of type int, %s given" , zend_zval_value_name (arg4 ));
1995
2014
RETURN_THROWS ();
1996
2015
}
1997
2016
0 commit comments