diff --git a/src/acl.c b/src/acl.c index aa42c58dc..07840406a 100644 --- a/src/acl.c +++ b/src/acl.c @@ -1990,7 +1990,8 @@ sds *ACLMergeSelectorArguments(sds *argv, int argc, int *merged_argc, int *inval for (int j = 0; j < argc; j++) { char *op = argv[j]; - if (op[0] == '(' && op[sdslen(op) - 1] != ')') { + if (open_bracket_start == -1 && + (op[0] == '(' && op[sdslen(op) - 1] != ')')) { selector = sdsdup(argv[j]); open_bracket_start = j; continue; diff --git a/tests/unit/acl-v2.tcl b/tests/unit/acl-v2.tcl index af23d745e..b259c2716 100644 --- a/tests/unit/acl-v2.tcl +++ b/tests/unit/acl-v2.tcl @@ -47,6 +47,15 @@ start_server {tags {"acl external:skip"}} { catch {r ACL SETUSER selector-syntax on (&* &fail)} e assert_match "*ERR Error in ACL SETUSER modifier '(*)*Adding a pattern after the*" $e + catch {r ACL SETUSER selector-syntax on (+PING (+SELECT (+DEL} e + assert_match "*ERR Unmatched parenthesis in acl selector*" $e + + catch {r ACL SETUSER selector-syntax on (+PING (+SELECT (+DEL ) ) ) } e + assert_match "*ERR Error in ACL SETUSER modifier*" $e + + catch {r ACL SETUSER selector-syntax on (+PING (+SELECT (+DEL ) } e + assert_match "*ERR Error in ACL SETUSER modifier*" $e + assert_equal "" [r ACL GETUSER selector-syntax] }