diff --git a/src/t_zset.c b/src/t_zset.c index 50ad8d43..4812709e 100644 --- a/src/t_zset.c +++ b/src/t_zset.c @@ -1259,10 +1259,11 @@ int zuiNext(zsetopsrc *op, zsetopval *val) { if (op->type == REDIS_SET) { iterset *it = &op->iter.set; if (op->encoding == REDIS_ENCODING_INTSET) { - int64_t ell = val->ell; + int64_t ell; if (!intsetGet(it->is.is,it->is.ii,&ell)) return 0; + val->ell = ell; val->score = 1.0; /* Move to next element. */ diff --git a/tests/unit/type/zset.tcl b/tests/unit/type/zset.tcl index bab98854..806f4c88 100644 --- a/tests/unit/type/zset.tcl +++ b/tests/unit/type/zset.tcl @@ -524,6 +524,14 @@ start_server {tags {"zset"}} { r zrange out 0 -1 withscores } {neginf 0} + test {ZINTERSTORE #516 regression, mixed sets and ziplist zsets} { + r sadd one 100 101 102 103 + r sadd two 100 200 201 202 + r zadd three 1 500 1 501 1 502 1 503 1 100 + r zinterstore to_here 3 one two three WEIGHTS 0 0 1 + r zrange to_here 0 -1 + } {100} + proc stressers {encoding} { if {$encoding == "ziplist"} { # Little extra to allow proper fuzzing in the sorting stresser