From 8fe7fad77180189a2a9064f98250a5b9c5818487 Mon Sep 17 00:00:00 2001 From: antirez Date: Thu, 4 Mar 2010 13:10:50 +0100 Subject: [PATCH] SUBSTR fix for integer encoded vals --- redis.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/redis.c b/redis.c index 6ad439b0..a0beff28 100644 --- a/redis.c +++ b/redis.c @@ -3778,9 +3778,12 @@ static void substrCommand(redisClient *c) { if (o->type != REDIS_STRING) { addReply(c,shared.wrongtypeerr); } else { - size_t rangelen, strlen = sdslen(o->ptr); + size_t rangelen, strlen; sds range; + o = getDecodedObject(o); + strlen = sdslen(o->ptr); + /* convert negative indexes */ if (start < 0) start = strlen+start; if (end < 0) end = strlen+end; @@ -3791,6 +3794,7 @@ static void substrCommand(redisClient *c) { if (start > end || (size_t)start >= strlen) { /* Out of range start or start > end result in null reply */ addReply(c,shared.nullbulk); + decrRefCount(o); return; } if ((size_t)end >= strlen) end = strlen-1; @@ -3801,6 +3805,7 @@ static void substrCommand(redisClient *c) { range = sdsnewlen((char*)o->ptr+start,rangelen); addReplySds(c,range); addReply(c,shared.crlf); + decrRefCount(o); } } }