summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSalvatore Sanfilippo <antirez@gmail.com>2014-09-03 15:10:35 +0200
committerSalvatore Sanfilippo <antirez@gmail.com>2014-09-03 15:10:35 +0200
commit0019479f8650ac7f0708ffe04e2571e31c3b7189 (patch)
tree56cd7f32ae41e848fa46ff0b2dcca0dcf6d635e9
parent67e414c7b871bced5e84f9eb9675a630ed6108dc (diff)
parentb20df972edf56c53a27d47839cdf58130bc6dfdc (diff)
downloadredis-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.c10
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);