summaryrefslogtreecommitdiff
path: root/src/sort.c
diff options
context:
space:
mode:
authorBigCat <miaout17@gmail.com>2011-12-19 19:29:46 +0800
committerBigCat <miaout17@gmail.com>2011-12-19 19:48:35 +0800
commit706b32e0e0a7dd20cc3f74501c1bfd74570b380c (patch)
tree7754ad4196d1561f1edbf197b1148f78eaf7f416 /src/sort.c
parent0e59a947287a793719226c2c7505d9fc8e616e1a (diff)
downloadredis-706b32e0e0a7dd20cc3f74501c1bfd74570b380c.tar.gz
Fix issue #247 : Accepting non-integer parameters when shouldn't
Using `getLongFromObjectOrReply` instead of `atoi` if possible. The following functions are modified. * lrangeCommand * ltrimCommand * lremCommand * lindexCommand * lsetCommand * zunionInterGenericCommand * genericZrangebyscoreCommand * sortCommand
Diffstat (limited to 'src/sort.c')
-rw-r--r--src/sort.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/sort.c b/src/sort.c
index 1a8376a8b..7e50582ef 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -133,7 +133,7 @@ void sortCommand(redisClient *c) {
list *operations;
unsigned int outputlen = 0;
int desc = 0, alpha = 0;
- int limit_start = 0, limit_count = -1, start, end;
+ long limit_start = 0, limit_count = -1, start, end;
int j, dontsort = 0, vectorlen;
int getop = 0; /* GET operation counter */
robj *sortval, *sortby = NULL, *storekey = NULL;
@@ -172,8 +172,8 @@ void sortCommand(redisClient *c) {
} else if (!strcasecmp(c->argv[j]->ptr,"alpha")) {
alpha = 1;
} else if (!strcasecmp(c->argv[j]->ptr,"limit") && leftargs >= 2) {
- limit_start = atoi(c->argv[j+1]->ptr);
- limit_count = atoi(c->argv[j+2]->ptr);
+ if ((getLongFromObjectOrReply(c, c->argv[j+1], &limit_start, NULL) != REDIS_OK) ||
+ (getLongFromObjectOrReply(c, c->argv[j+2], &limit_count, NULL) != REDIS_OK)) return;
j+=2;
} else if (!strcasecmp(c->argv[j]->ptr,"store") && leftargs >= 1) {
storekey = c->argv[j+1];