From 4284b0722052924fa7a800fb5cd9b05217770572 Mon Sep 17 00:00:00 2001 From: Matt Stancliff Date: Tue, 2 Sep 2014 17:56:17 -0400 Subject: [PATCH] Increase size of range request in getrange 32 bit builds don't have a big enough long to capture the same range as a 64 bit build. If we use "long long" we get proper size limits everywhere. Also updates size of unsigned comparison to fit new size of `end`. Fixes #1981 --- src/t_string.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/t_string.c b/src/t_string.c index 8a4d5f16..2bf772a2 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,7 +255,7 @@ 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. */ -- GitLab