@@ -493,25 +493,25 @@ static void
493493ra_index_change_keys (const  char  * cmd , zval  * z_keys , zval  * z_redis  TSRMLS_DC ) {
494494
495495	int  i , argc ;
496- 	zval  z_fun , z_ret ;
496+ 	zval  z_fun , z_ret ,  * * z_args ;
497497
498498	/* alloc */ 
499499	argc  =  1  +  zend_hash_num_elements (Z_ARRVAL_P (z_keys ));
500- 	zval   z_args [ argc ] ;
500+ 	z_args   =   emalloc ( argc   *   sizeof ( zval * )) ;
501501
502502	/* prepare first parameters */ 
503503	ZVAL_STRING (& z_fun , cmd );
504- 	ZVAL_STRING (& z_args [0 ], PHPREDIS_INDEX_NAME );
504+ 	ZVAL_STRING (z_args [0 ], PHPREDIS_INDEX_NAME );
505505
506506	/* prepare keys */ 
507507	for (i  =  0 ; i  <  argc  -  1 ; ++ i ) {
508508		zval  * zp ;
509509		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 );
511511	}
512512
513513	/* 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 );
515515
516516	/* don't dtor z_ret, since we're returning z_redis */ 
517517}
@@ -809,7 +809,7 @@ ra_expire_key(const char *key, int key_len, zval *z_to, long ttl TSRMLS_DC) {
809809static  zend_bool 
810810ra_move_zset (const  char  * key , int  key_len , zval  * z_from , zval  * z_to , long ttl   TSRMLS_DC ) {
811811
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 ;
813813	int  count ;
814814	HashTable  * h_zset_vals ;
815815	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
839839
840840	/* allocate argument array for ZADD */ 
841841	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 * )) ;
843843
844844	for (i  =  1 , zend_hash_internal_pointer_reset (h_zset_vals );
845845			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
851851
852852		/* add score */ 
853853		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 ));
855855
856856		/* add value */ 
857857		switch  (zend_hash_get_current_key_ex (h_zset_vals , & val , & idx , 0 )) {
858858			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. */ 
860860				break ;
861861			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 );
863863				break ;
864864			default :
865865				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
870870
871871	/* run ZADD on target */ 
872872	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 );
875875
876876	/* Expire if needed */ 
877877	ra_expire_key (key , key_len , z_to , ttl  TSRMLS_CC );
878878
879879	/* cleanup */ 
880880	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 ]);
882883	}
883884
884885    zval_dtor (& z_ret );
@@ -962,23 +963,23 @@ ra_move_collection(const char *key, int key_len, zval *z_from, zval *z_to,
962963		int  list_count , const  char  * * cmd_list ,
963964		int  add_count , const  char  * * cmd_add , long ttl   TSRMLS_DC ) {
964965
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 ;
966967	int  count , i ;
967968	HashTable  * h_set_vals ;
968969
969970	/* run retrieval command on source */ 
970- 	zval   z_retrieve_args [ 1   +   list_count ] ;
971+ 	z_retrieve_args   =   emalloc (( 1 + list_count )  *   sizeof ( zval * )) ;
971972	ZVAL_STRING (& z_fun_retrieve , cmd_list [0 ]);	/* set the command */ 
972973
973974	/* set the key */ 
974- 	ZVAL_STRINGL (& z_retrieve_args [0 ], key , key_len );
975+ 	ZVAL_STRINGL (z_retrieve_args [0 ], key , key_len );
975976
976977	/* possibly add some other args if they were provided. */ 
977978	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 ]);
979980	}
980981
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 );
982983
983984	if (Z_TYPE (z_ret ) !=  IS_ARRAY ) { /* key not found or replaced */ 
984985		/* TODO: report? */ 
@@ -988,9 +989,9 @@ ra_move_collection(const char *key, int key_len, zval *z_from, zval *z_to,
988989	/* run SADD/RPUSH on target */ 
989990	h_set_vals  =  Z_ARRVAL (z_ret );
990991	count  =  zend_hash_num_elements (h_set_vals );
991- 	zval   z_sadd_args [ 1  +  count ] ;
992+ 	z_sadd_args   =   emalloc (( 1  +  count )  *   sizeof ( zval * )) ;
992993	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 );
994995
995996	for (i  =  0 , zend_hash_internal_pointer_reset (h_set_vals );
996997			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,
10011002		}
10021003
10031004		/* 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 );
10051006	}
10061007
10071008    /* Clean up our input return value */ 
10081009    zval_dtor (& z_ret );
10091010
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 );
10111012
10121013    /* Expire if needed */ 
10131014    ra_expire_key (key , key_len , z_to , ttl  TSRMLS_CC );
10141015
10151016    /* cleanup */ 
10161017
10171018    for (i  =  0 ; i  <  count ; ++ i ) {
1018- 	zval_dtor (& z_sadd_args [i  +  1 ]);
1019+ 	zval_dtor (z_sadd_args [i  +  1 ]);
10191020    }
10201021    efree (z_sadd_args );
10211022
0 commit comments