]> git.saurik.com Git - redis.git/commitdiff
Check if stroll return value was clamped
authorPieter Noordhuis <pcnoordhuis@gmail.com>
Fri, 20 Aug 2010 11:42:42 +0000 (13:42 +0200)
committerPieter Noordhuis <pcnoordhuis@gmail.com>
Fri, 20 Aug 2010 11:42:42 +0000 (13:42 +0200)
src/object.c
tests/unit/type/set.tcl

index 45dde52b391b8b765ba4197306abd5eb49070e10..b16123eba641ba3307fbaacb9320cf8a80f3026b 100644 (file)
@@ -375,6 +375,7 @@ int getLongLongFromObject(robj *o, long long *target) {
         redisAssert(o->type == REDIS_STRING);
         if (o->encoding == REDIS_ENCODING_RAW) {
             value = strtoll(o->ptr, &eptr, 10);
         redisAssert(o->type == REDIS_STRING);
         if (o->encoding == REDIS_ENCODING_RAW) {
             value = strtoll(o->ptr, &eptr, 10);
+            if (errno == ERANGE) return REDIS_ERR;
             if (eptr[0] != '\0') return REDIS_ERR;
         } else if (o->encoding == REDIS_ENCODING_INT) {
             value = (long)o->ptr;
             if (eptr[0] != '\0') return REDIS_ERR;
         } else if (o->encoding == REDIS_ENCODING_INT) {
             value = (long)o->ptr;
index a1b655ef8891abb6b0cf54f3d862080056120d0a..056ed27c824ce888cec0952693e2ed0f0384707b 100644 (file)
@@ -45,6 +45,12 @@ start_server {
         assert_encoding hashtable myset
     }
 
         assert_encoding hashtable myset
     }
 
+    test "SADD an integer larger than 64 bits" {
+        create_set myset {213244124402402314402033402}
+        assert_encoding hashtable myset
+        assert_equal 1 [r sismember myset 213244124402402314402033402]
+    }
+
     test "SADD overflows the maximum allowed integers in an intset" {
         r del myset
         for {set i 0} {$i < 512} {incr i} { r sadd myset $i }
     test "SADD overflows the maximum allowed integers in an intset" {
         r del myset
         for {set i 0} {$i < 512} {incr i} { r sadd myset $i }