diff options
author | antirez <antirez@gmail.com> | 2014-03-10 15:44:41 +0100 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2014-03-11 11:10:33 +0100 |
commit | c3aff0c20a6c3186051280621f629533f556681f (patch) | |
tree | c9064afd9554079a4e101b9452fafefe455a1f1a | |
parent | fdf737e132f585915c403026c8c1e77ba948e2b0 (diff) | |
download | redis-c3aff0c20a6c3186051280621f629533f556681f.tar.gz |
Fixed memory leak in SORT LIMIT option argument parsing on error.
-rw-r--r-- | src/sort.c | 11 |
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]; |