@@ -2105,93 +2105,77 @@ redis_acl_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
21052105 char * * cmd , int * cmd_len , short * slot , void * * ctx )
21062106{
21072107 smart_string cmdstr = {0 };
2108- zend_string * zstr ;
2109- zval * z_args ;
2110- int argc , i ;
2108+ zend_string * op , * zstr ;
2109+ zval * z_args = NULL ;
2110+ int argc = 0 , i ;
21112111
2112- if ((argc = ZEND_NUM_ARGS ()) < 1 ) {
2113- php_error_docref (NULL , E_WARNING , "ACL command requires at least one argument" );
2114- return FAILURE ;
2115- }
2116-
2117- z_args = ecalloc (argc , sizeof (* z_args ));
2118- if (zend_get_parameters_array (ht , argc , z_args ) == FAILURE ) {
2119- goto failure ;
2120- }
2112+ ZEND_PARSE_PARAMETERS_START (1 , -1 )
2113+ Z_PARAM_STR (op )
2114+ Z_PARAM_OPTIONAL
2115+ Z_PARAM_VARIADIC ('*' , z_args , argc )
2116+ ZEND_PARSE_PARAMETERS_END_EX (return FAILURE );
21212117
2122- zstr = zval_get_string (& z_args [0 ]);
2123- if (zend_string_equals_literal_ci (zstr , "CAT" ) ||
2124- zend_string_equals_literal_ci (zstr , "LIST" ) ||
2125- zend_string_equals_literal_ci (zstr , "USERS" )
2118+ if (zend_string_equals_literal_ci (op , "CAT" ) ||
2119+ zend_string_equals_literal_ci (op , "LIST" ) ||
2120+ zend_string_equals_literal_ci (op , "USERS" )
21262121 ) {
21272122 * ctx = NULL ;
2128- } else if (zend_string_equals_literal_ci (zstr , "LOAD" ) ||
2129- zend_string_equals_literal_ci (zstr , "SAVE" )
2123+ } else if (zend_string_equals_literal_ci (op , "LOAD" ) ||
2124+ zend_string_equals_literal_ci (op , "SAVE" )
21302125 ) {
21312126 * ctx = PHPREDIS_CTX_PTR ;
2132- } else if (zend_string_equals_literal_ci (zstr , "GENPASS" ) ||
2133- zend_string_equals_literal_ci (zstr , "WHOAMI" )
2127+ } else if (zend_string_equals_literal_ci (op , "GENPASS" ) ||
2128+ zend_string_equals_literal_ci (op , "WHOAMI" )
21342129 ) {
21352130 * ctx = PHPREDIS_CTX_PTR + 1 ;
2136- } else if (zend_string_equals_literal_ci (zstr , "SETUSER" )) {
2137- if (argc < 2 ) {
2131+ } else if (zend_string_equals_literal_ci (op , "SETUSER" )) {
2132+ if (argc < 1 ) {
21382133 php_error_docref (NULL , E_WARNING , "ACL SETUSER requires at least one argument" );
2139- zend_string_release (zstr );
2140- goto failure ;
2134+ return FAILURE ;
21412135 }
21422136 * ctx = PHPREDIS_CTX_PTR ;
2143- } else if (zend_string_equals_literal_ci (zstr , "DELUSER" )) {
2144- if (argc < 2 ) {
2137+ } else if (zend_string_equals_literal_ci (op , "DELUSER" )) {
2138+ if (argc < 1 ) {
21452139 php_error_docref (NULL , E_WARNING , "ACL DELUSER requires at least one argument" );
2146- zend_string_release (zstr );
2147- goto failure ;
2140+ return FAILURE ;
21482141 }
21492142 * ctx = PHPREDIS_CTX_PTR + 2 ;
2150- } else if (zend_string_equals_literal_ci (zstr , "GETUSER" )) {
2151- if (argc < 2 ) {
2143+ } else if (zend_string_equals_literal_ci (op , "GETUSER" )) {
2144+ if (argc < 1 ) {
21522145 php_error_docref (NULL , E_WARNING , "ACL GETUSER requires at least one argument" );
2153- zend_string_release (zstr );
2154- goto failure ;
2146+ return FAILURE ;
21552147 }
21562148 * ctx = PHPREDIS_CTX_PTR + 3 ;
2157- } else if (zend_string_equals_literal_ci (zstr , "DRYRUN" )) {
2158- if (argc < 3 ) {
2149+ } else if (zend_string_equals_literal_ci (op , "DRYRUN" )) {
2150+ if (argc < 2 ) {
21592151 php_error_docref (NULL , E_WARNING , "ACL DRYRUN requires at least two arguments" );
2160- zend_string_release (zstr );
2161- goto failure ;
2152+ return FAILURE ;
21622153 }
21632154 * ctx = PHPREDIS_CTX_PTR ;
2164- } else if (zend_string_equals_literal_ci (zstr , "LOG" )) {
2165- if (argc > 1 && Z_TYPE (z_args [1 ]) == IS_STRING && ZVAL_STRICMP_STATIC (& z_args [1 ], "RESET" )) {
2155+ } else if (zend_string_equals_literal_ci (op , "LOG" )) {
2156+ if (argc > 0 && Z_TYPE (z_args [0 ]) == IS_STRING && ZVAL_STRICMP_STATIC (& z_args [0 ], "RESET" )) {
21662157 * ctx = PHPREDIS_CTX_PTR ;
21672158 } else {
21682159 * ctx = PHPREDIS_CTX_PTR + 4 ;
21692160 }
21702161 } else {
2171- php_error_docref (NULL , E_WARNING , "Unknown ACL operation '%s'" , ZSTR_VAL (zstr ));
2172- zend_string_release (zstr );
2173- goto failure ;
2162+ php_error_docref (NULL , E_WARNING , "Unknown ACL operation '%s'" , ZSTR_VAL (op ));
2163+ return FAILURE ;
21742164 }
21752165
2176- REDIS_CMD_INIT_SSTR_STATIC (& cmdstr , argc , "ACL" );
2177- redis_cmd_append_sstr_zstr (& cmdstr , zstr );
2178- zend_string_release (zstr );
2166+ REDIS_CMD_INIT_SSTR_STATIC (& cmdstr , 1 + argc , "ACL" );
2167+ redis_cmd_append_sstr_zstr (& cmdstr , op );
21792168
2180- for (i = 1 ; i < argc ; ++ i ) {
2169+ for (i = 0 ; i < argc ; ++ i ) {
21812170 zstr = zval_get_string (& z_args [i ]);
21822171 redis_cmd_append_sstr_zstr (& cmdstr , zstr );
21832172 zend_string_release (zstr );
21842173 }
2185- efree (z_args );
21862174
21872175 * cmd = cmdstr .c ;
21882176 * cmd_len = cmdstr .len ;
21892177
21902178 return SUCCESS ;
2191-
2192- failure :
2193- efree (z_args );
2194- return FAILURE ;
21952179}
21962180
21972181/* Attempt to pull a long expiry from a zval. We're more restrictave than zval_get_long
0 commit comments