Skip to content

Commit 497300a

Browse files
author
Emmanuel Merali
committed
Fixed move zset
Checked for values type to take into account numeric values
1 parent f0a2dc0 commit 497300a

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

redis_array_impl.c

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -696,7 +696,8 @@ ra_move_zset(const char *key, int key_len, zval *z_from, zval *z_to TSRMLS_DC) {
696696
char *val;
697697
int val_len, i;
698698
long idx;
699-
699+
int type;
700+
700701
/* run ZRANGE key 0 -1 WITHSCORES on source */
701702
ZVAL_STRINGL(&z_fun_zrange, "ZRANGE", 6, 0);
702703
for(i = 0; i < 4; ++i) {
@@ -733,17 +734,24 @@ ra_move_zset(const char *key, int key_len, zval *z_from, zval *z_to TSRMLS_DC) {
733734
continue;
734735
}
735736

736-
zend_hash_get_current_key_ex(h_zset_vals, &val, &val_len, &idx, 0, NULL);
737-
738737
/* add score */
739738
convert_to_double(*z_score_pp);
740739
MAKE_STD_ZVAL(z_zadd_args[i]);
741740
ZVAL_DOUBLE(z_zadd_args[i], Z_DVAL_PP(z_score_pp));
742741

743742
/* add value */
744743
MAKE_STD_ZVAL(z_zadd_args[i+1]);
745-
ZVAL_STRINGL(z_zadd_args[i+1], val, val_len-1, 0); /* we have to remove 1 because it is an array key. */
746-
744+
switch (zend_hash_get_current_key_ex(h_zset_vals, &val, &val_len, &idx, 0, NULL)) {
745+
case HASH_KEY_IS_STRING:
746+
ZVAL_STRINGL(z_zadd_args[i+1], val, val_len-1, 0); /* we have to remove 1 because it is an array key. */
747+
break;
748+
case HASH_KEY_IS_LONG:
749+
ZVAL_LONG(z_zadd_args[i+1], idx);
750+
break;
751+
default:
752+
return -1; // Todo: log error
753+
break;
754+
}
747755
i += 2;
748756
}
749757

0 commit comments

Comments
 (0)