mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 09:00:51 +00:00
Fix core dump when using 'command getkeys' with wrong arguments.
This commit is contained in:
parent
e6b0e8d9ec
commit
10dedc2586
6
src/db.c
6
src/db.c
@ -1224,7 +1224,7 @@ int *zunionInterGetKeys(struct redisCommand *cmd, robj **argv, int argc, int *nu
|
|||||||
num = atoi(argv[2]->ptr);
|
num = atoi(argv[2]->ptr);
|
||||||
/* Sanity check. Don't return any key if the command is going to
|
/* Sanity check. Don't return any key if the command is going to
|
||||||
* reply with syntax error. */
|
* reply with syntax error. */
|
||||||
if (num > (argc-3)) {
|
if (num < 1 || num > (argc-3)) {
|
||||||
*numkeys = 0;
|
*numkeys = 0;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -1253,7 +1253,7 @@ int *evalGetKeys(struct redisCommand *cmd, robj **argv, int argc, int *numkeys)
|
|||||||
num = atoi(argv[2]->ptr);
|
num = atoi(argv[2]->ptr);
|
||||||
/* Sanity check. Don't return any key if the command is going to
|
/* Sanity check. Don't return any key if the command is going to
|
||||||
* reply with syntax error. */
|
* reply with syntax error. */
|
||||||
if (num > (argc-3)) {
|
if (num <= 0 || num > (argc-3)) {
|
||||||
*numkeys = 0;
|
*numkeys = 0;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -1398,7 +1398,7 @@ int *xreadGetKeys(struct redisCommand *cmd, robj **argv, int argc, int *numkeys)
|
|||||||
if (streams_pos != -1) num = argc - streams_pos - 1;
|
if (streams_pos != -1) num = argc - streams_pos - 1;
|
||||||
|
|
||||||
/* Syntax error. */
|
/* Syntax error. */
|
||||||
if (streams_pos == -1 || num % 2 != 0) {
|
if (streams_pos == -1 || num == 0 || num % 2 != 0) {
|
||||||
*numkeys = 0;
|
*numkeys = 0;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -2842,7 +2842,10 @@ NULL
|
|||||||
int *keys, numkeys, j;
|
int *keys, numkeys, j;
|
||||||
|
|
||||||
if (!cmd) {
|
if (!cmd) {
|
||||||
addReplyErrorFormat(c,"Invalid command specified");
|
addReplyError(c,"Invalid command specified");
|
||||||
|
return;
|
||||||
|
} else if (cmd->getkeys_proc == NULL && cmd->firstkey == 0) {
|
||||||
|
addReplyError(c,"The command has no key arguments");
|
||||||
return;
|
return;
|
||||||
} else if ((cmd->arity > 0 && cmd->arity != c->argc-2) ||
|
} else if ((cmd->arity > 0 && cmd->arity != c->argc-2) ||
|
||||||
((c->argc-2) < -cmd->arity))
|
((c->argc-2) < -cmd->arity))
|
||||||
@ -2852,9 +2855,13 @@ NULL
|
|||||||
}
|
}
|
||||||
|
|
||||||
keys = getKeysFromCommand(cmd,c->argv+2,c->argc-2,&numkeys);
|
keys = getKeysFromCommand(cmd,c->argv+2,c->argc-2,&numkeys);
|
||||||
|
if (!keys) {
|
||||||
|
addReplyError(c,"Invalid arguments specified for command");
|
||||||
|
} else {
|
||||||
addReplyMultiBulkLen(c,numkeys);
|
addReplyMultiBulkLen(c,numkeys);
|
||||||
for (j = 0; j < numkeys; j++) addReplyBulk(c,c->argv[keys[j]+2]);
|
for (j = 0; j < numkeys; j++) addReplyBulk(c,c->argv[keys[j]+2]);
|
||||||
getKeysFreeResult(keys);
|
getKeysFreeResult(keys);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
addReplyErrorFormat(c, "Unknown subcommand or wrong number of arguments for '%s'. Try COMMAND HELP", (char*)c->argv[1]->ptr);
|
addReplyErrorFormat(c, "Unknown subcommand or wrong number of arguments for '%s'. Try COMMAND HELP", (char*)c->argv[1]->ptr);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user