summaryrefslogtreecommitdiff
path: root/src/sort.c
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2014-03-10 16:10:50 +0100
committerantirez <antirez@gmail.com>2014-03-10 16:10:50 +0100
commit03344196f375761a90fa1429ff617a12fb1f3ff6 (patch)
tree04a9b657dab3d4dac6fb16d2d7baf57c5abd5e09 /src/sort.c
parent8caecc9ab466011fd1432c0a7e2dc51ae8797629 (diff)
downloadredis-03344196f375761a90fa1429ff617a12fb1f3ff6.tar.gz
Cluster: don't allow GET option in cluster mode.
The commit also refactors a bit the error handling during SORT option parsing.
Diffstat (limited to 'src/sort.c')
-rw-r--r--src/sort.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/sort.c b/src/sort.c
index 300060942..95c87cc04 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -194,6 +194,7 @@ void sortCommand(redisClient *c) {
int j, dontsort = 0, vectorlen;
int getop = 0; /* GET operation counter */
int int_convertion_error = 0;
+ int syntax_error = 0;
robj *sortval, *sortby = NULL, *storekey = NULL;
redisSortObject *vector; /* Resulting vector to sort */
@@ -236,9 +237,8 @@ void sortCommand(redisClient *c) {
(getLongFromObjectOrReply(c, c->argv[j+2], &limit_count, NULL)
!= REDIS_OK))
{
- decrRefCount(sortval);
- listRelease(operations);
- return;
+ syntax_error++;
+ break;
}
j+=2;
} else if (!strcasecmp(c->argv[j]->ptr,"store") && leftargs >= 1) {
@@ -251,19 +251,30 @@ void sortCommand(redisClient *c) {
if (strchr(c->argv[j+1]->ptr,'*') == NULL) dontsort = 1;
j++;
} else if (!strcasecmp(c->argv[j]->ptr,"get") && leftargs >= 1) {
+ if (server.cluster_enabled) {
+ addReplyError(c,"GET option of SORT denied in Cluster mode.");
+ syntax_error++;
+ break;
+ }
listAddNodeTail(operations,createSortOperation(
REDIS_SORT_GET,c->argv[j+1]));
getop++;
j++;
} else {
- decrRefCount(sortval);
- listRelease(operations);
addReply(c,shared.syntaxerr);
- return;
+ syntax_error++;
+ break;
}
j++;
}
+ /* Handle syntax errors set during options parsing. */
+ if (syntax_error) {
+ decrRefCount(sortval);
+ listRelease(operations);
+ return;
+ }
+
/* For the STORE option, or when SORT is called from a Lua script,
* we want to force a specific ordering even when no explicit ordering
* was asked (SORT BY nosort). This guarantees that replication / AOF