summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan-Erik Rediger <badboy@archlinux.us>2014-06-29 12:32:06 +0200
committerantirez <antirez@gmail.com>2014-08-07 12:40:44 +0200
commit53fdfda9e3316a5763c78569fa74bf42e1c4b3a7 (patch)
tree19183148f7c52a53db9730d680e4584c2f2a2687
parentf17f8521f005321d3e163ed83ec2fa9f1b925b0f (diff)
downloadredis-53fdfda9e3316a5763c78569fa74bf42e1c4b3a7.tar.gz
Handle large getrange requests
Previously the end was casted to a smaller type which resulted in a wrong check and failed with values larger than handled by unsigned. Closes #1847, #1844
-rw-r--r--src/t_string.c2
-rw-r--r--tests/unit/basic.tcl5
2 files changed, 6 insertions, 1 deletions
diff --git a/src/t_string.c b/src/t_string.c
index 41e4b3b71..397363c5c 100644
--- a/src/t_string.c
+++ b/src/t_string.c
@@ -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 ((unsigned)end >= strlen) end = strlen-1;
+ if ((size_t)end >= strlen) end = strlen-1;
/* Precondition: end >= 0 && end < strlen, so the only condition where
* nothing can be returned is: start > end. */
diff --git a/tests/unit/basic.tcl b/tests/unit/basic.tcl
index 6f7fe292c..2579cc9dc 100644
--- a/tests/unit/basic.tcl
+++ b/tests/unit/basic.tcl
@@ -769,4 +769,9 @@ start_server {tags {"basic"}} {
r keys *
r keys *
} {dlskeriewrioeuwqoirueioqwrueoqwrueqw}
+
+ test {GETRANGE with huge ranges, Github issue #1844} {
+ r set foo bar
+ r getrange foo 0 4294967297
+ } {bar}
}