]> git.saurik.com Git - redis.git/commitdiff
make sure the value to insert is string encoded
authorPieter Noordhuis <pcnoordhuis@gmail.com>
Fri, 11 Jun 2010 11:27:21 +0000 (13:27 +0200)
committerPieter Noordhuis <pcnoordhuis@gmail.com>
Fri, 11 Jun 2010 11:27:21 +0000 (13:27 +0200)
redis.c
tests/unit/type/list.tcl

diff --git a/redis.c b/redis.c
index c39f5846fae2e15ee4ab5347d3025a955e54b17c..ca4d9f870e79b213fc44b144124361b1f4cd2f8f 100644 (file)
--- 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);
index 691040ece9abdc34771ce6559359b09de29c58b5..81eabd3a92f54dfa88ae6df17954cf962a486f20 100644 (file)
@@ -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} {