diff options
author | Salvatore Sanfilippo <antirez@gmail.com> | 2014-09-03 15:10:35 +0200 |
---|---|---|
committer | Salvatore Sanfilippo <antirez@gmail.com> | 2014-09-03 15:10:35 +0200 |
commit | 0019479f8650ac7f0708ffe04e2571e31c3b7189 (patch) | |
tree | 56cd7f32ae41e848fa46ff0b2dcca0dcf6d635e9 | |
parent | 67e414c7b871bced5e84f9eb9675a630ed6108dc (diff) | |
parent | b20df972edf56c53a27d47839cdf58130bc6dfdc (diff) | |
download | redis-0019479f8650ac7f0708ffe04e2571e31c3b7189.tar.gz |
Merge pull request #1982 from mattsta/fix-getrange-32bit
Increase size of range request in getrange
-rw-r--r-- | src/t_string.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/t_string.c b/src/t_string.c index 8a4d5f166..f06693815 100644 --- a/src/t_string.c +++ b/src/t_string.c @@ -231,13 +231,13 @@ void setrangeCommand(redisClient *c) { void getrangeCommand(redisClient *c) { robj *o; - long start, end; + long long start, end; char *str, llbuf[32]; size_t strlen; - if (getLongFromObjectOrReply(c,c->argv[2],&start,NULL) != REDIS_OK) + if (getLongLongFromObjectOrReply(c,c->argv[2],&start,NULL) != REDIS_OK) return; - if (getLongFromObjectOrReply(c,c->argv[3],&end,NULL) != REDIS_OK) + if (getLongLongFromObjectOrReply(c,c->argv[3],&end,NULL) != REDIS_OK) return; if ((o = lookupKeyReadOrReply(c,c->argv[1],shared.emptybulk)) == NULL || checkType(c,o,REDIS_STRING)) return; @@ -255,11 +255,11 @@ void getrangeCommand(redisClient *c) { if (end < 0) end = strlen+end; if (start < 0) start = 0; if (end < 0) end = 0; - if ((size_t)end >= strlen) end = strlen-1; + if ((unsigned long long)end >= strlen) end = strlen-1; /* Precondition: end >= 0 && end < strlen, so the only condition where * nothing can be returned is: start > end. */ - if (start > end) { + if (start > end || strlen == 0) { addReply(c,shared.emptybulk); } else { addReplyBulkCBuffer(c,(char*)str+start,end-start+1); |