diff options
author | antirez <antirez@gmail.com> | 2014-03-10 15:44:41 +0100 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2014-03-10 15:44:41 +0100 |
commit | 8caecc9ab466011fd1432c0a7e2dc51ae8797629 (patch) | |
tree | 10b5f04bc542a9db631d4258610fa1437116952d | |
parent | ef5e7fbaa20fcda2debd2751d8437d7c2c53b1e0 (diff) | |
download | redis-8caecc9ab466011fd1432c0a7e2dc51ae8797629.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]; |