@@ -1877,7 +1877,6 @@ PHP_FUNCTION(socket_set_option)
1877
1877
RETURN_THROWS ();
1878
1878
}
1879
1879
1880
- convert_to_array (arg4 );
1881
1880
opt_ht = Z_ARRVAL_P (arg4 );
1882
1881
1883
1882
if ((l_onoff = zend_hash_str_find (opt_ht , l_onoff_key , sizeof (l_onoff_key ) - 1 )) == NULL ) {
@@ -1889,29 +1888,29 @@ PHP_FUNCTION(socket_set_option)
1889
1888
RETURN_THROWS ();
1890
1889
}
1891
1890
1892
- zend_long zl_onoff = zval_try_get_long (l_onoff , & failed );
1891
+ zend_long vall_lonoff = zval_try_get_long (l_onoff , & failed );
1893
1892
if (failed ) {
1894
1893
zend_argument_type_error (4 , "\"%s\" must be of type int, %s given" , l_onoff_key , zend_zval_value_name (l_onoff ));
1895
1894
RETURN_THROWS ();
1896
1895
}
1897
- zend_long zl_linger = zval_try_get_long (l_linger , & failed );
1896
+ zend_long vall_linger = zval_try_get_long (l_linger , & failed );
1898
1897
if (failed ) {
1899
1898
zend_argument_type_error (4 , "\"%s\" must be of type int, %s given" , l_linger_key , zend_zval_value_name (l_linger ));
1900
1899
RETURN_THROWS ();
1901
1900
}
1902
1901
1903
- if (zl_onoff < 0 || zl_onoff > USHRT_MAX ) {
1902
+ if (vall_lonoff < 0 || vall_lonoff > USHRT_MAX ) {
1904
1903
zend_argument_value_error (4 , "\"%s\" must be between 0 and %u" , l_onoff_key , USHRT_MAX );
1905
1904
RETURN_THROWS ();
1906
1905
}
1907
1906
1908
- if (zl_linger < 0 || zl_linger > USHRT_MAX ) {
1907
+ if (vall_linger < 0 || vall_linger > USHRT_MAX ) {
1909
1908
zend_argument_value_error (4 , "\"%s\" must be between 0 and %d" , l_linger , USHRT_MAX );
1910
1909
RETURN_THROWS ();
1911
1910
}
1912
1911
1913
- lv .l_onoff = (unsigned short )zl_onoff ;
1914
- lv .l_linger = (unsigned short )zl_linger ;
1912
+ lv .l_onoff = (unsigned short )vall_lonoff ;
1913
+ lv .l_linger = (unsigned short )vall_linger ;
1915
1914
1916
1915
optlen = sizeof (lv );
1917
1916
opt_ptr = & lv ;
@@ -1928,7 +1927,6 @@ PHP_FUNCTION(socket_set_option)
1928
1927
RETURN_THROWS ();
1929
1928
}
1930
1929
1931
- convert_to_array (arg4 );
1932
1930
opt_ht = Z_ARRVAL_P (arg4 );
1933
1931
1934
1932
if ((sec = zend_hash_str_find (opt_ht , sec_key , sizeof (sec_key ) - 1 )) == NULL ) {
@@ -1940,23 +1938,35 @@ PHP_FUNCTION(socket_set_option)
1940
1938
RETURN_THROWS ();
1941
1939
}
1942
1940
1943
- zend_long zsec = zval_try_get_long (sec , & failed );
1941
+ zend_long valsec = zval_try_get_long (sec , & failed );
1944
1942
if (failed ) {
1945
1943
zend_argument_type_error (4 , "\"%s\" must be of type int, %s given" , sec_key , zend_zval_value_name (sec ));
1946
1944
RETURN_THROWS ();
1947
1945
}
1948
- zend_long zusec = zval_try_get_long (usec , & failed );
1946
+ zend_long valusec = zval_try_get_long (usec , & failed );
1949
1947
if (failed ) {
1950
1948
zend_argument_type_error (4 , "\"%s\" must be of type int, %s given" , usec_key , zend_zval_value_name (usec ));
1951
1949
RETURN_THROWS ();
1952
1950
}
1953
1951
#ifndef PHP_WIN32
1954
- tv .tv_sec = zsec ;
1955
- tv .tv_usec = zusec ;
1952
+ tv .tv_sec = valsec ;
1953
+ tv .tv_usec = valusec ;
1956
1954
optlen = sizeof (tv );
1957
1955
opt_ptr = & tv ;
1958
1956
#else
1959
- timeout = zsec * 1000 + zusec / 1000 ;
1957
+ if (valsec < 0 || valsec > INT_MAX / 1000 ) {
1958
+ zend_argument_value_error (4 , "\"%s\" must be between 0 and %d" , sec_key , INT_MAX / 1000 );
1959
+ RETURN_THROWS ();
1960
+ }
1961
+
1962
+ timeout = valsec * 1000 ;
1963
+
1964
+ if (valusec < 0 || timeout > INT_MAX - (valusec / 1000 )) {
1965
+ zend_argument_value_error (4 , "\"%s\" must be between 0 and %u" , usec_key , (DWORD )(INT_MAX - (valusec / 1000 )));
1966
+ RETURN_THROWS ();
1967
+ }
1968
+
1969
+ timeout += valusec / 1000 ;
1960
1970
optlen = sizeof (int );
1961
1971
opt_ptr = & timeout ;
1962
1972
#endif
0 commit comments