@@ -493,25 +493,25 @@ static void
493
493
ra_index_change_keys (const char * cmd , zval * z_keys , zval * z_redis TSRMLS_DC ) {
494
494
495
495
int i , argc ;
496
- zval z_fun , z_ret ;
496
+ zval z_fun , z_ret , * * z_args ;
497
497
498
498
/* alloc */
499
499
argc = 1 + zend_hash_num_elements (Z_ARRVAL_P (z_keys ));
500
- zval z_args [ argc ] ;
500
+ z_args = emalloc ( argc * sizeof ( zval * )) ;
501
501
502
502
/* prepare first parameters */
503
503
ZVAL_STRING (& z_fun , cmd );
504
- ZVAL_STRING (& z_args [0 ], PHPREDIS_INDEX_NAME );
504
+ ZVAL_STRING (z_args [0 ], PHPREDIS_INDEX_NAME );
505
505
506
506
/* prepare keys */
507
507
for (i = 0 ; i < argc - 1 ; ++ i ) {
508
508
zval * zp ;
509
509
zp = zend_hash_index_find (Z_ARRVAL_P (z_keys ), i );
510
- ZVAL_DUP (& z_args [i + 1 ], zp );
510
+ ZVAL_DUP (z_args [i + 1 ], zp );
511
511
}
512
512
513
513
/* run cmd */
514
- call_user_function (& redis_ce -> function_table , z_redis , & z_fun , & z_ret , argc , z_args TSRMLS_CC );
514
+ call_user_function (& redis_ce -> function_table , z_redis , & z_fun , & z_ret , argc , * z_args TSRMLS_CC );
515
515
516
516
/* don't dtor z_ret, since we're returning z_redis */
517
517
}
@@ -809,7 +809,7 @@ ra_expire_key(const char *key, int key_len, zval *z_to, long ttl TSRMLS_DC) {
809
809
static zend_bool
810
810
ra_move_zset (const char * key , int key_len , zval * z_from , zval * z_to , long ttl TSRMLS_DC ) {
811
811
812
- zval z_fun_zrange , z_fun_zadd , z_ret , z_ret_dest , z_args [4 ], * z_score_p ;
812
+ zval z_fun_zrange , z_fun_zadd , z_ret , z_ret_dest , z_args [4 ], * z_score_p , * * z_zadd_args ;
813
813
int count ;
814
814
HashTable * h_zset_vals ;
815
815
zend_string * val ;
@@ -839,7 +839,7 @@ ra_move_zset(const char *key, int key_len, zval *z_from, zval *z_to, long ttl TS
839
839
840
840
/* allocate argument array for ZADD */
841
841
count = zend_hash_num_elements (h_zset_vals );
842
- zval z_zadd_args [ ( 1 + 2 * count ) ] ;
842
+ z_zadd_args = emalloc (( 1 + 2 * count ) * sizeof ( zval * )) ;
843
843
844
844
for (i = 1 , zend_hash_internal_pointer_reset (h_zset_vals );
845
845
zend_hash_has_more_elements (h_zset_vals ) == SUCCESS ;
@@ -851,15 +851,15 @@ ra_move_zset(const char *key, int key_len, zval *z_from, zval *z_to, long ttl TS
851
851
852
852
/* add score */
853
853
convert_to_double (z_score_p );
854
- ZVAL_DOUBLE (& z_zadd_args [i ], Z_DVAL_P (z_score_p ));
854
+ ZVAL_DOUBLE (z_zadd_args [i ], Z_DVAL_P (z_score_p ));
855
855
856
856
/* add value */
857
857
switch (zend_hash_get_current_key_ex (h_zset_vals , & val , & idx , 0 )) {
858
858
case HASH_KEY_IS_STRING :
859
- ZVAL_STRINGL (& z_zadd_args [i + 1 ], val -> val , val -> len - 1 ); /* we have to remove 1 because it is an array key. */
859
+ ZVAL_STRINGL (z_zadd_args [i + 1 ], val -> val , val -> len - 1 ); /* we have to remove 1 because it is an array key. */
860
860
break ;
861
861
case HASH_KEY_IS_LONG :
862
- ZVAL_LONG (& z_zadd_args [i + 1 ], (long )idx );
862
+ ZVAL_LONG (z_zadd_args [i + 1 ], (long )idx );
863
863
break ;
864
864
default :
865
865
return -1 ; /* Todo: log error */
@@ -870,15 +870,16 @@ ra_move_zset(const char *key, int key_len, zval *z_from, zval *z_to, long ttl TS
870
870
871
871
/* run ZADD on target */
872
872
ZVAL_STRINGL (& z_fun_zadd , "ZADD" , 4 );
873
- ZVAL_STRINGL (& z_zadd_args [0 ], key , key_len );
874
- call_user_function (& redis_ce -> function_table , z_to , & z_fun_zadd , & z_ret_dest , 1 + 2 * count , z_zadd_args TSRMLS_CC );
873
+ ZVAL_STRINGL (z_zadd_args [0 ], key , key_len );
874
+ call_user_function (& redis_ce -> function_table , z_to , & z_fun_zadd , & z_ret_dest , 1 + 2 * count , * z_zadd_args TSRMLS_CC );
875
875
876
876
/* Expire if needed */
877
877
ra_expire_key (key , key_len , z_to , ttl TSRMLS_CC );
878
878
879
879
/* cleanup */
880
880
for (i = 0 ; i < 1 + 2 * count ; ++ i ) {
881
- zval_dtor (& z_zadd_args [i ]);
881
+ zval_dtor (z_zadd_args [i ]);
882
+ efree (& z_zadd_args [i ]);
882
883
}
883
884
884
885
zval_dtor (& z_ret );
@@ -962,23 +963,23 @@ ra_move_collection(const char *key, int key_len, zval *z_from, zval *z_to,
962
963
int list_count , const char * * cmd_list ,
963
964
int add_count , const char * * cmd_add , long ttl TSRMLS_DC ) {
964
965
965
- zval z_fun_retrieve , z_fun_sadd , z_ret , * z_data_p ;
966
+ zval z_fun_retrieve , z_fun_sadd , z_ret , * z_data_p , * * z_retrieve_args , * * z_sadd_args ;
966
967
int count , i ;
967
968
HashTable * h_set_vals ;
968
969
969
970
/* run retrieval command on source */
970
- zval z_retrieve_args [ 1 + list_count ] ;
971
+ z_retrieve_args = emalloc (( 1 + list_count ) * sizeof ( zval * )) ;
971
972
ZVAL_STRING (& z_fun_retrieve , cmd_list [0 ]); /* set the command */
972
973
973
974
/* set the key */
974
- ZVAL_STRINGL (& z_retrieve_args [0 ], key , key_len );
975
+ ZVAL_STRINGL (z_retrieve_args [0 ], key , key_len );
975
976
976
977
/* possibly add some other args if they were provided. */
977
978
for (i = 1 ; i < list_count ; ++ i ) {
978
- ZVAL_STRING (& z_retrieve_args [i ], cmd_list [i ]);
979
+ ZVAL_STRING (z_retrieve_args [i ], cmd_list [i ]);
979
980
}
980
981
981
- call_user_function (& redis_ce -> function_table , z_from , & z_fun_retrieve , & z_ret , list_count , z_retrieve_args TSRMLS_CC );
982
+ call_user_function (& redis_ce -> function_table , z_from , & z_fun_retrieve , & z_ret , list_count , * z_retrieve_args TSRMLS_CC );
982
983
983
984
if (Z_TYPE (z_ret ) != IS_ARRAY ) { /* key not found or replaced */
984
985
/* TODO: report? */
@@ -988,9 +989,9 @@ ra_move_collection(const char *key, int key_len, zval *z_from, zval *z_to,
988
989
/* run SADD/RPUSH on target */
989
990
h_set_vals = Z_ARRVAL (z_ret );
990
991
count = zend_hash_num_elements (h_set_vals );
991
- zval z_sadd_args [ 1 + count ] ;
992
+ z_sadd_args = emalloc (( 1 + count ) * sizeof ( zval * )) ;
992
993
ZVAL_STRING (& z_fun_sadd , cmd_add [0 ]);
993
- ZVAL_STRINGL (& z_sadd_args [0 ], key , key_len );
994
+ ZVAL_STRINGL (z_sadd_args [0 ], key , key_len );
994
995
995
996
for (i = 0 , zend_hash_internal_pointer_reset (h_set_vals );
996
997
zend_hash_has_more_elements (h_set_vals ) == SUCCESS ;
@@ -1001,21 +1002,21 @@ ra_move_collection(const char *key, int key_len, zval *z_from, zval *z_to,
1001
1002
}
1002
1003
1003
1004
/* add set elements */
1004
- ZVAL_DUP (& z_sadd_args [i + 1 ], z_data_p );
1005
+ ZVAL_DUP (z_sadd_args [i + 1 ], z_data_p );
1005
1006
}
1006
1007
1007
1008
/* Clean up our input return value */
1008
1009
zval_dtor (& z_ret );
1009
1010
1010
- call_user_function (& redis_ce -> function_table , z_to , & z_fun_sadd , & z_ret , count + 1 , z_sadd_args TSRMLS_CC );
1011
+ call_user_function (& redis_ce -> function_table , z_to , & z_fun_sadd , & z_ret , count + 1 , * z_sadd_args TSRMLS_CC );
1011
1012
1012
1013
/* Expire if needed */
1013
1014
ra_expire_key (key , key_len , z_to , ttl TSRMLS_CC );
1014
1015
1015
1016
/* cleanup */
1016
1017
1017
1018
for (i = 0 ; i < count ; ++ i ) {
1018
- zval_dtor (& z_sadd_args [i + 1 ]);
1019
+ zval_dtor (z_sadd_args [i + 1 ]);
1019
1020
}
1020
1021
efree (z_sadd_args );
1021
1022
0 commit comments