Merge pull request #5787 from soloestoy/bugfix-xgroup-create-with-mkstream

Streams: checkType before XGROUP CREATE
This commit is contained in:
Salvatore Sanfilippo 2019-03-13 12:34:29 +01:00 committed by GitHub
commit 2537b2140f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1737,14 +1737,17 @@ NULL
/* Everything but the "HELP" option requires a key and group name. */ /* Everything but the "HELP" option requires a key and group name. */
if (c->argc >= 4) { if (c->argc >= 4) {
o = lookupKeyWrite(c->db,c->argv[2]); o = lookupKeyWrite(c->db,c->argv[2]);
if (o) s = o->ptr; if (o) {
if (checkType(c,o,OBJ_STREAM)) return;
s = o->ptr;
}
grpname = c->argv[3]->ptr; grpname = c->argv[3]->ptr;
} }
/* Check for missing key/group. */ /* Check for missing key/group. */
if (c->argc >= 4 && !mkstream) { if (c->argc >= 4 && !mkstream) {
/* At this point key must exist, or there is an error. */ /* At this point key must exist, or there is an error. */
if (o == NULL) { if (s == NULL) {
addReplyError(c, addReplyError(c,
"The XGROUP subcommand requires the key to exist. " "The XGROUP subcommand requires the key to exist. "
"Note that for CREATE you may want to use the MKSTREAM " "Note that for CREATE you may want to use the MKSTREAM "
@ -1752,8 +1755,6 @@ NULL
return; return;
} }
if (checkType(c,o,OBJ_STREAM)) return;
/* Certain subcommands require the group to exist. */ /* Certain subcommands require the group to exist. */
if ((cg = streamLookupCG(s,grpname)) == NULL && if ((cg = streamLookupCG(s,grpname)) == NULL &&
(!strcasecmp(opt,"SETID") || (!strcasecmp(opt,"SETID") ||
@ -1781,7 +1782,8 @@ NULL
} }
/* Handle the MKSTREAM option now that the command can no longer fail. */ /* Handle the MKSTREAM option now that the command can no longer fail. */
if (s == NULL && mkstream) { if (s == NULL) {
serverAssert(mkstream);
o = createStreamObject(); o = createStreamObject();
dbAdd(c->db,c->argv[2],o); dbAdd(c->db,c->argv[2],o);
s = o->ptr; s = o->ptr;