From: Pieter Noordhuis Date: Fri, 11 Jun 2010 11:27:21 +0000 (+0200) Subject: make sure the value to insert is string encoded X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/244b873b0c753f126db88ef9fe15aefe4a44f558 make sure the value to insert is string encoded --- diff --git a/redis.c b/redis.c index c39f5846..ca4d9f87 100644 --- a/redis.c +++ b/redis.c @@ -5091,6 +5091,7 @@ static robj *listTypeGet(listTypeEntry *entry) { static void listTypeInsert(listTypeEntry *entry, robj *value, int where) { robj *subject = entry->li->subject; if (entry->li->encoding == REDIS_ENCODING_ZIPLIST) { + value = getDecodedObject(value); if (where == REDIS_TAIL) { unsigned char *next = ziplistNext(subject->ptr,entry->zi); @@ -5104,6 +5105,7 @@ static void listTypeInsert(listTypeEntry *entry, robj *value, int where) { } else { subject->ptr = ziplistInsert(subject->ptr,entry->zi,value->ptr,sdslen(value->ptr)); } + decrRefCount(value); } else if (entry->li->encoding == REDIS_ENCODING_LIST) { if (where == REDIS_TAIL) { listInsertNode(subject->ptr,entry->ln,value,AL_START_TAIL); diff --git a/tests/unit/type/list.tcl b/tests/unit/type/list.tcl index 691040ec..81eabd3a 100644 --- a/tests/unit/type/list.tcl +++ b/tests/unit/type/list.tcl @@ -73,6 +73,8 @@ start_server { assert_equal 8 [r linsert xlist before a aa] assert_equal 8 [r linsert xlist before bad aaa] assert_equal {aa a b zz c yy d dd} [r lrange xlist 0 10] + assert_equal 9 [r linsert xlist before aa 42] + assert_equal 42 [r lrange xlist 0 0] } test {LPUSHX, RPUSHX, LPUSHXAFTER, RPUSHXAFTER - regular list} { @@ -98,6 +100,8 @@ start_server { assert_equal 8 [r linsert xlist before a aa] assert_equal 8 [r linsert xlist before bad aaa] assert_equal {aa a aaaaaaaaaaaaaaaaa zz c yy d dd} [r lrange xlist 0 10] + assert_equal 9 [r linsert xlist before aa 42] + assert_equal 42 [r lrange xlist 0 0] } test {DEL a list - ziplist} {