diff --git a/src/t_zset.c b/src/t_zset.c index 0e7d726b..99fe6a8b 100644 --- a/src/t_zset.c +++ b/src/t_zset.c @@ -196,6 +196,10 @@ static int zslValueInRange(double value, zrangespec *spec) { int zslIsInRange(zskiplist *zsl, zrangespec *range) { zskiplistNode *x; + /* Test for ranges that will always be empty. */ + if (range->min > range->max || + (range->min == range->max && (range->minex || range->maxex))) + return 0; x = zsl->tail; if (x == NULL || !zslValueInMinRange(x->score,range)) return 0; diff --git a/tests/unit/type/zset.tcl b/tests/unit/type/zset.tcl index a54ff37b..fdeebd2f 100644 --- a/tests/unit/type/zset.tcl +++ b/tests/unit/type/zset.tcl @@ -233,12 +233,16 @@ start_server {tags {"zset"}} { r zrem zset g # inclusive + assert_equal {} [r zrangebyscore zset 4 2] assert_equal {} [r zrangebyscore zset 6 +inf] assert_equal {} [r zrangebyscore zset -inf -6] assert_equal {} [r zrevrangebyscore zset +inf 6] assert_equal {} [r zrevrangebyscore zset -6 -inf] # exclusive + assert_equal {} [r zrangebyscore zset (4 (2] + assert_equal {} [r zrangebyscore zset 2 (2] + assert_equal {} [r zrangebyscore zset (2 2] assert_equal {} [r zrangebyscore zset (6 (+inf] assert_equal {} [r zrangebyscore zset (-inf (-6] assert_equal {} [r zrevrangebyscore zset (+inf (6]