From c74e7c775789392f65e4b3cc6b5a7d52ab94053f Mon Sep 17 00:00:00 2001
From: antirez <antirez@gmail.com>
Date: Sat, 28 Nov 2009 18:03:09 +0100
Subject: [PATCH] ZRANGEBYSCORE memory leak fixed, ZRANGEBYSCORE initial test
 added

---
 redis.c        |  1 +
 test-redis.tcl | 21 +++++++++++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/redis.c b/redis.c
index 6cf8f465..98434620 100644
--- a/redis.c
+++ b/redis.c
@@ -4587,6 +4587,7 @@ static void zrangebyscoreCommand(redisClient *c) {
              * it later */
             lenobj = createObject(REDIS_STRING,NULL);
             addReply(c,lenobj);
+            decrRefCount(lenobj);
 
             while(ln && ln->score <= max) {
                 ele = ln->obj;
diff --git a/test-redis.tcl b/test-redis.tcl
index 354016e0..22e88040 100644
--- a/test-redis.tcl
+++ b/test-redis.tcl
@@ -1014,6 +1014,27 @@ proc main {server port} {
         list $v1 $v2 [$r zscore zset foo] [$r zscore zset bar]
     } {{bar foo} {foo bar} -2 6}
 
+    test {ZRANGEBYSCORE basics} {
+        $r del zset
+        $r zadd zset 1 a
+        $r zadd zset 2 b
+        $r zadd zset 3 c
+        $r zadd zset 4 d
+        $r zadd zset 5 e
+        $r zrangebyscore zset 2 4
+    } {b c d}
+
+    test {Sorted sets +inf and -inf handling} {
+        $r del zset
+        $r zadd zset -100 a
+        $r zadd zset 200 b
+        $r zadd zset -300 c
+        $r zadd zset 1000000 d
+        $r zadd zset +inf max
+        $r zadd zset -inf min
+        $r zrange zset 0 -1
+    } {min c a b d max}
+
     test {EXPIRE - don't set timeouts multiple times} {
         $r set x foobar
         set v1 [$r expire x 5]