From: Pieter Noordhuis Date: Sun, 30 May 2010 01:08:24 +0000 (+0200) Subject: fixed LINDEX to always return bulk response X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/bd8db0ada840e2c52ab37470256676a05c6fe855 fixed LINDEX to always return bulk response --- diff --git a/redis.c b/redis.c index 064f4cad..1ae32797 100644 --- a/redis.c +++ b/redis.c @@ -4993,6 +4993,7 @@ static void lindexCommand(redisClient *c) { robj *o = lookupKeyReadOrReply(c,c->argv[1],shared.nullbulk); if (o == NULL || checkType(c,o,REDIS_LIST)) return; int index = atoi(c->argv[2]->ptr); + robj *value = NULL; if (o->encoding == REDIS_ENCODING_ZIPLIST) { unsigned char *p; @@ -5002,17 +5003,20 @@ static void lindexCommand(redisClient *c) { p = ziplistIndex(o->ptr,index); if (ziplistGet(p,&v,&vlen,&vval)) { if (v) { - addReplySds(c,sdsnewlen(v,vlen)); + value = createStringObject(v,vlen); } else { - addReplyLongLong(c,vval); + value = createStringObjectFromLongLong(vval); } + addReplyBulk(c,value); + decrRefCount(value); } else { addReply(c,shared.nullbulk); } } else if (o->encoding == REDIS_ENCODING_LIST) { listNode *ln = listIndex(o->ptr,index); if (ln != NULL) { - addReply(c,(robj*)listNodeValue(ln)); + value = listNodeValue(ln); + addReplyBulk(c,value); } else { addReply(c,shared.nullbulk); }