diff --git a/redis.c b/redis.c index 4f3773d06a245a42fcd7aa88dfad68534306d2e2..9d8f5a9047e539212c59703a1bda9a3538b92884 100644 --- a/redis.c +++ b/redis.c @@ -4231,8 +4231,8 @@ static void incrDecrCommand(redisClient *c, long long incr) { robj *o; o = lookupKeyWrite(c->db,c->argv[1]); - - if (getLongLongFromObjectOrReply(c, o, &value, NULL) != REDIS_OK) return; + if (o != NULL && checkType(c,o,REDIS_STRING)) return; + if (getLongLongFromObjectOrReply(c,o,&value,NULL) != REDIS_OK) return; value += incr; o = createObject(REDIS_STRING,sdscatprintf(sdsempty(),"%lld",value)); diff --git a/test-redis.tcl b/test-redis.tcl index d4a9ecdb017cb8cbecd45aca4e6ac35bd8a2d1b7..a306ea6a8c929b878858463785e933bfc86aba0c 100644 --- a/test-redis.tcl +++ b/test-redis.tcl @@ -373,7 +373,7 @@ proc main {} { test {INCR fails against a key holding a list} { $r rpush mylist 1 - catch {$r incr novar} err + catch {$r incr mylist} err $r rpop mylist format $err } {ERR*}