From: Pieter Noordhuis <pcnoordhuis@gmail.com>
Date: Fri, 16 Apr 2010 11:37:40 +0000 (+0200)
Subject: check object type in lookupKeyByPattern
X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/b6f07345c9e4383ac444c895e08e7998ae404915

check object type in lookupKeyByPattern
---

diff --git a/redis.c b/redis.c
index 76f28578..ee9eccfb 100644
--- a/redis.c
+++ b/redis.c
@@ -6533,6 +6533,10 @@ static robj *lookupKeyByPattern(redisDb *db, robj *pattern, robj *subst) {
         initStaticStringObject(fieldobj,((char*)&fieldname)+(sizeof(long)*2));
         o = hashGet(o, &fieldobj);
     } else {
+        if (o->type != REDIS_STRING) {
+            return NULL;
+        }
+
         /* Every object that this function returns needs to have its refcount
          * increased. sortCommand decreases it again. */
         incrRefCount(o);
@@ -6707,10 +6711,6 @@ static void sortCommand(redisClient *c) {
                 /* lookup value to sort by */
                 byval = lookupKeyByPattern(c->db,sortby,vector[j].obj);
                 if (!byval) continue;
-                if (byval->type != REDIS_STRING) {
-                    decrRefCount(byval);
-                    continue;
-                }
             } else {
                 /* use object itself to sort by */
                 byval = vector[j].obj;