@@ -3868,21 +3868,21 @@ void redis_setoption_handler(INTERNAL_FUNCTION_PARAMETERS,
38683868{
38693869 long val_long ;
38703870 zend_long option ;
3871- char * val_str ;
3871+ zval * val ;
3872+ zend_string * val_str ;
38723873 struct timeval read_tv ;
3873- size_t val_len ;
38743874 int tcp_keepalive = 0 ;
38753875 php_netstream_data_t * sock ;
38763876
3877- if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "ls " , & option ,
3878- & val_str , & val_len ) == FAILURE )
3877+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "lz " , & option ,
3878+ & val ) == FAILURE )
38793879 {
38803880 RETURN_FALSE ;
38813881 }
38823882
38833883 switch (option ) {
38843884 case REDIS_OPT_SERIALIZER :
3885- val_long = atol ( val_str );
3885+ val_long = zval_get_long ( val );
38863886 if (val_long == REDIS_SERIALIZER_NONE || val_long == REDIS_SERIALIZER_PHP
38873887#ifdef HAVE_REDIS_IGBINARY
38883888 || val_long == REDIS_SERIALIZER_IGBINARY
@@ -3896,7 +3896,7 @@ void redis_setoption_handler(INTERNAL_FUNCTION_PARAMETERS,
38963896 }
38973897 break ;
38983898 case REDIS_OPT_COMPRESSION :
3899- val_long = atol ( val_str );
3899+ val_long = zval_get_long ( val );
39003900 if (val_long == REDIS_COMPRESSION_NONE
39013901#ifdef HAVE_REDIS_LZF
39023902 || val_long == REDIS_COMPRESSION_LZF
@@ -3911,12 +3911,15 @@ void redis_setoption_handler(INTERNAL_FUNCTION_PARAMETERS,
39113911 zend_string_release (redis_sock -> prefix );
39123912 redis_sock -> prefix = NULL ;
39133913 }
3914- if (val_str && val_len > 0 ) {
3915- redis_sock -> prefix = zend_string_init (val_str , val_len , 0 );
3914+ val_str = zval_get_string (val );
3915+ if (ZSTR_LEN (val_str ) > 0 ) {
3916+ redis_sock -> prefix = val_str ;
3917+ } else {
3918+ zend_string_release (val_str );
39163919 }
39173920 RETURN_TRUE ;
39183921 case REDIS_OPT_READ_TIMEOUT :
3919- redis_sock -> read_timeout = atof ( val_str );
3922+ redis_sock -> read_timeout = zval_get_double ( val );
39203923 if (redis_sock -> stream ) {
39213924 read_tv .tv_sec = (time_t )redis_sock -> read_timeout ;
39223925 read_tv .tv_usec = (int )((redis_sock -> read_timeout -
@@ -3932,7 +3935,7 @@ void redis_setoption_handler(INTERNAL_FUNCTION_PARAMETERS,
39323935 if (ZSTR_VAL (redis_sock -> host )[0 ] == '/' && redis_sock -> port < 1 ) {
39333936 RETURN_FALSE ;
39343937 }
3935- tcp_keepalive = atol ( val_str ) > 0 ? 1 : 0 ;
3938+ tcp_keepalive = zval_get_long ( val ) > 0 ? 1 : 0 ;
39363939 if (redis_sock -> tcp_keepalive == tcp_keepalive ) {
39373940 RETURN_TRUE ;
39383941 }
@@ -3947,14 +3950,14 @@ void redis_setoption_handler(INTERNAL_FUNCTION_PARAMETERS,
39473950 }
39483951 RETURN_TRUE ;
39493952 case REDIS_OPT_SCAN :
3950- val_long = atol ( val_str );
3953+ val_long = zval_get_long ( val );
39513954 if (val_long == REDIS_SCAN_NORETRY || val_long == REDIS_SCAN_RETRY ) {
39523955 redis_sock -> scan = val_long ;
39533956 RETURN_TRUE ;
39543957 }
39553958 break ;
39563959 case REDIS_OPT_FAILOVER :
3957- val_long = atol ( val_str );
3960+ val_long = zval_get_long ( val );
39583961 if (val_long == REDIS_FAILOVER_NONE ||
39593962 val_long == REDIS_FAILOVER_ERROR ||
39603963 val_long == REDIS_FAILOVER_DISTRIBUTE ||
0 commit comments