@@ -746,20 +746,23 @@ static int redis_get_zcmd_flags(const char *kw) {
746746}
747747
748748/* Validate ZLEX* min/max argument strings */
749- #define validate_zlex_arg_zstr (zs_ ) validate_zlex_arg(ZSTR_VAL((zs_)), ZSTR_LEN((zs_)))
750- static int validate_zlex_arg (const char * arg , size_t len ) {
751- return (len > 1 && (* arg == '[' || * arg == '(' )) ||
752- (len == 1 && (* arg == '+' || * arg == '-' ));
749+ static int validate_zlex_arg (const char * str , size_t len ) {
750+ return (len > 1 && (* str == '[' || * str == '(' )) ||
751+ (len == 1 && (* str == '+' || * str == '-' ));
752+ }
753+
754+ static int validate_zlex_arg_zval (zval * z ) {
755+ return Z_TYPE_P (z ) == IS_STRING && validate_zlex_arg (Z_STRVAL_P (z ), Z_STRLEN_P (z ));
753756}
754757
755758int redis_zrange_cmd (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock ,
756759 char * kw , char * * cmd , int * cmd_len , short * slot ,
757760 void * * ctx )
758761{
759- zend_string * dst = NULL , * src = NULL , * sstart = NULL , * send = NULL ;
762+ zval * zoptions = NULL , * zstart , * zend ;
763+ zend_string * dst = NULL , * src = NULL ;
760764 zend_long start = 0 , end = 0 ;
761765 smart_string cmdstr = {0 };
762- zval * zoptions = NULL ;
763766 redisZcmdOptions opt ;
764767 int min_argc , flags ;
765768 short slot2 ;
@@ -776,8 +779,8 @@ int redis_zrange_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
776779 Z_PARAM_LONG (start )
777780 Z_PARAM_LONG (end )
778781 } else {
779- Z_PARAM_STR ( sstart )
780- Z_PARAM_STR ( send )
782+ Z_PARAM_ZVAL ( zstart )
783+ Z_PARAM_ZVAL ( zend )
781784 }
782785 Z_PARAM_OPTIONAL
783786 Z_PARAM_ZVAL_OR_NULL (zoptions )
@@ -787,7 +790,7 @@ int redis_zrange_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
787790
788791 if (opt .bylex ) {
789792 ZEND_ASSERT (!(flags & REDIS_ZCMD_INT_RANGE ));
790- if (!validate_zlex_arg_zstr ( sstart ) || !validate_zlex_arg_zstr ( send )) {
793+ if (!validate_zlex_arg_zval ( zstart ) || !validate_zlex_arg_zval ( zend )) {
791794 php_error_docref (NULL , E_WARNING , "Legographical args must start with '[' or '(' or be '+' or '-'" );
792795 return FAILURE ;
793796 }
@@ -812,8 +815,8 @@ int redis_zrange_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
812815 redis_cmd_append_sstr_long (& cmdstr , start );
813816 redis_cmd_append_sstr_long (& cmdstr , end );
814817 } else {
815- redis_cmd_append_sstr_zstr (& cmdstr , sstart );
816- redis_cmd_append_sstr_zstr (& cmdstr , send );
818+ redis_cmd_append_sstr_zval (& cmdstr , zstart , NULL );
819+ redis_cmd_append_sstr_zval (& cmdstr , zend , NULL );
817820 }
818821
819822 REDIS_CMD_APPEND_SSTR_OPT_STATIC (& cmdstr , opt .byscore , "BYSCORE" );
0 commit comments