Revert reset in multi, move errno ERANGE

Signed-off-by: Daniil Kashapov <daniil.kashapov.ykt@gmail.com>
This commit is contained in:
Daniil Kashapov 2025-12-15 21:39:35 +05:00
parent efa1125458
commit c3afa1069e
3 changed files with 7 additions and 3 deletions

View File

@ -1003,12 +1003,12 @@ static int ACLSetSelectorDatabasePermissions(aclSelector *selector, const char *
int64_t dbid = strtoll(tokens[i], &endptr, 10);
/* Reject invalid input format */
if (errno == ERANGE || *endptr != '\0') {
if (*endptr != '\0') {
return ACLDatabasePermissionError(new_dbs, dblist, tokens, count, EINVAL);
}
/* Reject out of range values */
if (dbid < 0 || dbid >= server.dbnum) {
if (errno == ERANGE || dbid < 0 || dbid >= server.dbnum) {
return ACLDatabasePermissionError(new_dbs, dblist, tokens, count, ERANGE);
}
@ -1770,7 +1770,7 @@ int ACLSelectorCanAccessDb(aclSelector *selector, long long dbid) {
if (dbid < 0 || dbid >= server.dbnum || !selector->dbs)
return 0;
return intsetFind(selector->dbs, (int64_t)dbid);
return intsetFind(selector->dbs, dbid);
}
/* To prevent duplicate calls to getKeysResult, a cache is maintained

View File

@ -70,6 +70,7 @@ void resetClientMultiState(client *c) {
c->mstate->cmd_inv_flags = 0;
c->mstate->argv_len_sums = 0;
c->mstate->alloc_count = 0;
c->mstate->transaction_db_id = c->db->id;
}
/* Add a new command into the MULTI commands queue */

View File

@ -719,6 +719,9 @@ start_server {tags {"acl external:skip"}} {
catch {r ACL SETUSER db-edge-user db=abc} err
assert_match "*Error in ACL SETUSER modifier 'db=abc': Syntax error*" $err
catch {r ACL SETUSER db-edge-user db=12345678987654321} err
assert_match "*Error in ACL SETUSER modifier 'db=12345678987654321': The provided database ID is out of range*" $err
catch {r ACL SETUSER db-edge-user db=16} err
assert_match "*Error in ACL SETUSER modifier 'db=16': The provided database ID is out of range*" $err