summaryrefslogtreecommitdiff
path: root/src/sort.c
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2014-03-10 15:44:41 +0100
committerantirez <antirez@gmail.com>2014-03-10 15:44:41 +0100
commit8caecc9ab466011fd1432c0a7e2dc51ae8797629 (patch)
tree10b5f04bc542a9db631d4258610fa1437116952d /src/sort.c
parentef5e7fbaa20fcda2debd2751d8437d7c2c53b1e0 (diff)
downloadredis-8caecc9ab466011fd1432c0a7e2dc51ae8797629.tar.gz
Fixed memory leak in SORT LIMIT option argument parsing on error.
Diffstat (limited to 'src/sort.c')
-rw-r--r--src/sort.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/sort.c b/src/sort.c
index d90cf2c2d..300060942 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -231,8 +231,15 @@ void sortCommand(redisClient *c) {
} else if (!strcasecmp(c->argv[j]->ptr,"alpha")) {
alpha = 1;
} else if (!strcasecmp(c->argv[j]->ptr,"limit") && leftargs >= 2) {
- if ((getLongFromObjectOrReply(c, c->argv[j+1], &limit_start, NULL) != REDIS_OK) ||
- (getLongFromObjectOrReply(c, c->argv[j+2], &limit_count, NULL) != REDIS_OK)) return;
+ if ((getLongFromObjectOrReply(c, c->argv[j+1], &limit_start, NULL)
+ != REDIS_OK) ||
+ (getLongFromObjectOrReply(c, c->argv[j+2], &limit_count, NULL)
+ != REDIS_OK))
+ {
+ decrRefCount(sortval);
+ listRelease(operations);
+ return;
+ }
j+=2;
} else if (!strcasecmp(c->argv[j]->ptr,"store") && leftargs >= 1) {
storekey = c->argv[j+1];