From 6485f293827bed97a791ff6c88a8f3d92b00b1c5 Mon Sep 17 00:00:00 2001
From: Pieter Noordhuis <pcnoordhuis@gmail.com>
Date: Tue, 11 May 2010 22:46:24 +0200
Subject: [PATCH] fix to return error when calling INCR on a non-string type

---
 redis.c        | 4 ++--
 test-redis.tcl | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/redis.c b/redis.c
index 4f3773d06..9d8f5a904 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 d4a9ecdb0..a306ea6a8 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*}