From 3f3cb9d09b815869764e74dd52af1994fed55fe6 Mon Sep 17 00:00:00 2001 From: Yossi Gottlieb Date: Thu, 21 Jan 2021 11:56:08 +0200 Subject: [PATCH] Better error message const correctness. (#8348) --- src/acl.c | 10 +++---- src/config.c | 74 +++++++++++++++++++++++++------------------------- src/sentinel.c | 4 +-- src/server.h | 4 +-- 4 files changed, 46 insertions(+), 46 deletions(-) diff --git a/src/acl.c b/src/acl.c index 14d023cc3..1f07c292f 100644 --- a/src/acl.c +++ b/src/acl.c @@ -1024,8 +1024,8 @@ int ACLSetUser(user *u, const char *op, ssize_t oplen) { /* Return a description of the error that occurred in ACLSetUser() according to * the errno value set by the function on error. */ -char *ACLSetUserStringError(void) { - char *errmsg = "Wrong format"; +const char *ACLSetUserStringError(void) { + const char *errmsg = "Wrong format"; if (errno == ENOENT) errmsg = "Unknown command or category name in ACL"; else if (errno == EINVAL) @@ -1454,7 +1454,7 @@ int ACLLoadConfiguredUsers(void) { /* Load every rule defined for this user. */ for (int j = 1; aclrules[j]; j++) { if (ACLSetUser(u,aclrules[j],sdslen(aclrules[j])) != C_OK) { - char *errmsg = ACLSetUserStringError(); + const char *errmsg = ACLSetUserStringError(); serverLog(LL_WARNING,"Error loading ACL rule '%s' for " "the user named '%s': %s", aclrules[j],aclrules[0],errmsg); @@ -1587,7 +1587,7 @@ sds ACLLoadFromFile(const char *filename) { for (j = 2; j < argc; j++) { argv[j] = sdstrim(argv[j],"\t\r\n"); if (ACLSetUser(fakeuser,argv[j],sdslen(argv[j])) != C_OK) { - char *errmsg = ACLSetUserStringError(); + const char *errmsg = ACLSetUserStringError(); errors = sdscatprintf(errors, "%s:%d: %s. ", server.acl_filename, linenum, errmsg); @@ -1908,7 +1908,7 @@ void aclCommand(client *c) { for (int j = 3; j < c->argc; j++) { if (ACLSetUser(tempu,c->argv[j]->ptr,sdslen(c->argv[j]->ptr)) != C_OK) { - char *errmsg = ACLSetUserStringError(); + const char *errmsg = ACLSetUserStringError(); addReplyErrorFormat(c, "Error in ACL SETUSER modifier '%s': %s", (char*)c->argv[j]->ptr, errmsg); diff --git a/src/config.c b/src/config.c index 2f9721f58..ec8867342 100644 --- a/src/config.c +++ b/src/config.c @@ -153,15 +153,15 @@ int configOOMScoreAdjValuesDefaults[CONFIG_OOM_COUNT] = { 0, 200, 800 }; typedef struct boolConfigData { int *config; /* The pointer to the server config this value is stored in */ const int default_value; /* The default value of the config on rewrite */ - int (*is_valid_fn)(int val, char **err); /* Optional function to check validity of new value (generic doc above) */ - int (*update_fn)(int val, int prev, char **err); /* Optional function to apply new value at runtime (generic doc above) */ + int (*is_valid_fn)(int val, const char **err); /* Optional function to check validity of new value (generic doc above) */ + int (*update_fn)(int val, int prev, const char **err); /* Optional function to apply new value at runtime (generic doc above) */ } boolConfigData; typedef struct stringConfigData { char **config; /* Pointer to the server config this value is stored in. */ const char *default_value; /* Default value of the config on rewrite. */ - int (*is_valid_fn)(char* val, char **err); /* Optional function to check validity of new value (generic doc above) */ - int (*update_fn)(char* val, char* prev, char **err); /* Optional function to apply new value at runtime (generic doc above) */ + int (*is_valid_fn)(char* val, const char **err); /* Optional function to check validity of new value (generic doc above) */ + int (*update_fn)(char* val, char* prev, const char **err); /* Optional function to apply new value at runtime (generic doc above) */ int convert_empty_to_null; /* Boolean indicating if empty strings should be stored as a NULL value. */ } stringConfigData; @@ -169,8 +169,8 @@ typedef struct stringConfigData { typedef struct sdsConfigData { sds *config; /* Pointer to the server config this value is stored in. */ const char *default_value; /* Default value of the config on rewrite. */ - int (*is_valid_fn)(sds val, char **err); /* Optional function to check validity of new value (generic doc above) */ - int (*update_fn)(sds val, sds prev, char **err); /* Optional function to apply new value at runtime (generic doc above) */ + int (*is_valid_fn)(sds val, const char **err); /* Optional function to check validity of new value (generic doc above) */ + int (*update_fn)(sds val, sds prev, const char **err); /* Optional function to apply new value at runtime (generic doc above) */ int convert_empty_to_null; /* Boolean indicating if empty SDS strings should be stored as a NULL value. */ } sdsConfigData; @@ -179,8 +179,8 @@ typedef struct enumConfigData { int *config; /* The pointer to the server config this value is stored in */ configEnum *enum_value; /* The underlying enum type this data represents */ const int default_value; /* The default value of the config on rewrite */ - int (*is_valid_fn)(int val, char **err); /* Optional function to check validity of new value (generic doc above) */ - int (*update_fn)(int val, int prev, char **err); /* Optional function to apply new value at runtime (generic doc above) */ + int (*is_valid_fn)(int val, const char **err); /* Optional function to check validity of new value (generic doc above) */ + int (*update_fn)(int val, int prev, const char **err); /* Optional function to apply new value at runtime (generic doc above) */ } enumConfigData; typedef enum numericType { @@ -214,8 +214,8 @@ typedef struct numericConfigData { long long lower_bound; /* The lower bound of this numeric value */ long long upper_bound; /* The upper bound of this numeric value */ const long long default_value; /* The default value of the config on rewrite */ - int (*is_valid_fn)(long long val, char **err); /* Optional function to check validity of new value (generic doc above) */ - int (*update_fn)(long long val, long long prev, char **err); /* Optional function to apply new value at runtime (generic doc above) */ + int (*is_valid_fn)(long long val, const char **err); /* Optional function to check validity of new value (generic doc above) */ + int (*update_fn)(long long val, long long prev, const char **err); /* Optional function to apply new value at runtime (generic doc above) */ } numericConfigData; typedef union typeData { @@ -230,10 +230,10 @@ typedef struct typeInterface { /* Called on server start, to init the server with default value */ void (*init)(typeData data); /* Called on server start, should return 1 on success, 0 on error and should set err */ - int (*load)(typeData data, sds *argc, int argv, char **err); + int (*load)(typeData data, sds *argc, int argv, const char **err); /* Called on server startup and CONFIG SET, returns 1 on success, 0 on error * and can set a verbose err string, update is true when called from CONFIG SET */ - int (*set)(typeData data, sds value, int update, char **err); + int (*set)(typeData data, sds value, int update, const char **err); /* Called on CONFIG GET, required to add output to the client */ void (*get)(client *c, typeData data); /* Called on CONFIG REWRITE, required to rewrite the config state */ @@ -325,7 +325,7 @@ void queueLoadModule(sds path, sds *argv, int argc) { * server.oom_score_adj_values if valid. */ -static int updateOOMScoreAdjValues(sds *args, char **err, int apply) { +static int updateOOMScoreAdjValues(sds *args, const char **err, int apply) { int i; int values[CONFIG_OOM_COUNT]; @@ -385,7 +385,7 @@ void initConfigValues() { } void loadServerConfigFromString(char *config) { - char *err = NULL; + const char *err = NULL; int linenum = 0, totlines, i; int slaveof_linenum = 0; sds *lines; @@ -608,7 +608,7 @@ void loadServerConfigFromString(char *config) { int argc_err; if (ACLAppendUserForLoading(argv,argc,&argc_err) == C_ERR) { char buf[1024]; - char *errmsg = ACLSetUserStringError(); + const char *errmsg = ACLSetUserStringError(); snprintf(buf,sizeof(buf),"Error in user declaration '%s': %s", argv[argc_err],errmsg); err = buf; @@ -730,7 +730,7 @@ void configSetCommand(client *c) { robj *o; long long ll; int err; - char *errstr = NULL; + const char *errstr = NULL; serverAssertWithInfo(c,c->argv[2],sdsEncodedObject(c->argv[2])); serverAssertWithInfo(c,c->argv[3],sdsEncodedObject(c->argv[3])); o = c->argv[3]; @@ -1795,7 +1795,7 @@ static void boolConfigInit(typeData data) { *data.yesno.config = data.yesno.default_value; } -static int boolConfigSet(typeData data, sds value, int update, char **err) { +static int boolConfigSet(typeData data, sds value, int update, const char **err) { int yn = yesnotoi(value); if (yn == -1) { *err = "argument must be 'yes' or 'no'"; @@ -1836,7 +1836,7 @@ static void stringConfigInit(typeData data) { *data.string.config = (data.string.convert_empty_to_null && !data.string.default_value) ? NULL : zstrdup(data.string.default_value); } -static int stringConfigSet(typeData data, sds value, int update, char **err) { +static int stringConfigSet(typeData data, sds value, int update, const char **err) { if (data.string.is_valid_fn && !data.string.is_valid_fn(value, err)) return 0; char *prev = *data.string.config; @@ -1863,7 +1863,7 @@ static void sdsConfigInit(typeData data) { *data.sds.config = (data.sds.convert_empty_to_null && !data.sds.default_value) ? NULL: sdsnew(data.sds.default_value); } -static int sdsConfigSet(typeData data, sds value, int update, char **err) { +static int sdsConfigSet(typeData data, sds value, int update, const char **err) { if (data.sds.is_valid_fn && !data.sds.is_valid_fn(value, err)) return 0; sds prev = *data.sds.config; @@ -1922,7 +1922,7 @@ static void enumConfigInit(typeData data) { *data.enumd.config = data.enumd.default_value; } -static int enumConfigSet(typeData data, sds value, int update, char **err) { +static int enumConfigSet(typeData data, sds value, int update, const char **err) { int enumval = configEnumGetValue(data.enumd.enum_value, value); if (enumval == INT_MIN) { sds enumerr = sdsnew("argument must be one of the following: "); @@ -2028,7 +2028,7 @@ static void numericConfigInit(typeData data) { SET_NUMERIC_TYPE(data.numeric.default_value) } -static int numericBoundaryCheck(typeData data, long long ll, char **err) { +static int numericBoundaryCheck(typeData data, long long ll, const char **err) { if (data.numeric.numeric_type == NUMERIC_TYPE_ULONG_LONG || data.numeric.numeric_type == NUMERIC_TYPE_UINT || data.numeric.numeric_type == NUMERIC_TYPE_SIZE_T) { @@ -2058,7 +2058,7 @@ static int numericBoundaryCheck(typeData data, long long ll, char **err) { return 1; } -static int numericConfigSet(typeData data, sds value, int update, char **err) { +static int numericConfigSet(typeData data, sds value, int update, const char **err) { long long ll, prev = 0; if (data.numeric.is_memory) { int memerr; @@ -2196,7 +2196,7 @@ static void numericConfigRewrite(typeData data, const char *name, struct rewrite } \ } -static int isValidActiveDefrag(int val, char **err) { +static int isValidActiveDefrag(int val, const char **err) { #ifndef HAVE_DEFRAG if (val) { *err = "Active defragmentation cannot be enabled: it " @@ -2212,7 +2212,7 @@ static int isValidActiveDefrag(int val, char **err) { return 1; } -static int isValidDBfilename(char *val, char **err) { +static int isValidDBfilename(char *val, const char **err) { if (!pathIsBaseName(val)) { *err = "dbfilename can't be a path, just a filename"; return 0; @@ -2220,7 +2220,7 @@ static int isValidDBfilename(char *val, char **err) { return 1; } -static int isValidAOFfilename(char *val, char **err) { +static int isValidAOFfilename(char *val, const char **err) { if (!pathIsBaseName(val)) { *err = "appendfilename can't be a path, just a filename"; return 0; @@ -2228,7 +2228,7 @@ static int isValidAOFfilename(char *val, char **err) { return 1; } -static int updateHZ(long long val, long long prev, char **err) { +static int updateHZ(long long val, long long prev, const char **err) { UNUSED(prev); UNUSED(err); /* Hz is more a hint from the user, so we accept values out of range @@ -2240,14 +2240,14 @@ static int updateHZ(long long val, long long prev, char **err) { return 1; } -static int updateJemallocBgThread(int val, int prev, char **err) { +static int updateJemallocBgThread(int val, int prev, const char **err) { UNUSED(prev); UNUSED(err); set_jemalloc_bg_thread(val); return 1; } -static int updateReplBacklogSize(long long val, long long prev, char **err) { +static int updateReplBacklogSize(long long val, long long prev, const char **err) { /* resizeReplicationBacklog sets server.repl_backlog_size, and relies on * being able to tell when the size changes, so restore prev before calling it. */ UNUSED(err); @@ -2256,7 +2256,7 @@ static int updateReplBacklogSize(long long val, long long prev, char **err) { return 1; } -static int updateMaxmemory(long long val, long long prev, char **err) { +static int updateMaxmemory(long long val, long long prev, const char **err) { UNUSED(prev); UNUSED(err); if (val) { @@ -2269,7 +2269,7 @@ static int updateMaxmemory(long long val, long long prev, char **err) { return 1; } -static int updateGoodSlaves(long long val, long long prev, char **err) { +static int updateGoodSlaves(long long val, long long prev, const char **err) { UNUSED(val); UNUSED(prev); UNUSED(err); @@ -2277,7 +2277,7 @@ static int updateGoodSlaves(long long val, long long prev, char **err) { return 1; } -static int updateAppendonly(int val, int prev, char **err) { +static int updateAppendonly(int val, int prev, const char **err) { UNUSED(prev); if (val == 0 && server.aof_state != AOF_OFF) { stopAppendOnly(); @@ -2290,7 +2290,7 @@ static int updateAppendonly(int val, int prev, char **err) { return 1; } -static int updateSighandlerEnabled(int val, int prev, char **err) { +static int updateSighandlerEnabled(int val, int prev, const char **err) { UNUSED(err); UNUSED(prev); if (val) @@ -2300,7 +2300,7 @@ static int updateSighandlerEnabled(int val, int prev, char **err) { return 1; } -static int updateMaxclients(long long val, long long prev, char **err) { +static int updateMaxclients(long long val, long long prev, const char **err) { /* Try to check if the OS is capable of supporting so many FDs. */ if (val > prev) { adjustOpenFilesLimit(); @@ -2328,7 +2328,7 @@ static int updateMaxclients(long long val, long long prev, char **err) { return 1; } -static int updateOOMScoreAdj(int val, int prev, char **err) { +static int updateOOMScoreAdj(int val, int prev, const char **err) { UNUSED(prev); if (val) { @@ -2342,7 +2342,7 @@ static int updateOOMScoreAdj(int val, int prev, char **err) { } #ifdef USE_OPENSSL -static int updateTlsCfg(char *val, char *prev, char **err) { +static int updateTlsCfg(char *val, char *prev, const char **err) { UNUSED(val); UNUSED(prev); UNUSED(err); @@ -2355,13 +2355,13 @@ static int updateTlsCfg(char *val, char *prev, char **err) { } return 1; } -static int updateTlsCfgBool(int val, int prev, char **err) { +static int updateTlsCfgBool(int val, int prev, const char **err) { UNUSED(val); UNUSED(prev); return updateTlsCfg(NULL, NULL, err); } -static int updateTlsCfgInt(long long val, long long prev, char **err) { +static int updateTlsCfgInt(long long val, long long prev, const char **err) { UNUSED(val); UNUSED(prev); return updateTlsCfg(NULL, NULL, err); diff --git a/src/sentinel.c b/src/sentinel.c index 26c129385..9da7732a0 100644 --- a/src/sentinel.c +++ b/src/sentinel.c @@ -1645,7 +1645,7 @@ char *sentinelInstanceMapCommand(sentinelRedisInstance *ri, char *command) { /* Generalise handling create instance error. Use SRI_MASTER, SRI_SLAVE or * SRI_SENTINEL as a role value. */ -char *sentinelCheckCreateInstanceErrors(int role) { +const char *sentinelCheckCreateInstanceErrors(int role) { switch(errno) { case EBUSY: switch (role) { @@ -1669,7 +1669,7 @@ char *sentinelCheckCreateInstanceErrors(int role) { } } -char *sentinelHandleConfiguration(char **argv, int argc) { +const char *sentinelHandleConfiguration(char **argv, int argc) { sentinelRedisInstance *ri; if (!strcasecmp(argv[0],"monitor") && argc == 5) { diff --git a/src/server.h b/src/server.h index 13144ce32..cb103aca8 100644 --- a/src/server.h +++ b/src/server.h @@ -2044,7 +2044,7 @@ int ACLSetUser(user *u, const char *op, ssize_t oplen); sds ACLDefaultUserFirstPassword(void); uint64_t ACLGetCommandCategoryFlagByName(const char *name); int ACLAppendUserForLoading(sds *argv, int argc, int *argc_err); -char *ACLSetUserStringError(void); +const char *ACLSetUserStringError(void); int ACLLoadConfiguredUsers(void); sds ACLDescribeUser(user *u); void ACLLoadUsersAtStartup(void); @@ -2332,7 +2332,7 @@ int clusterSendModuleMessageToTarget(const char *target, uint64_t module_id, uin void initSentinelConfig(void); void initSentinel(void); void sentinelTimer(void); -char *sentinelHandleConfiguration(char **argv, int argc); +const char *sentinelHandleConfiguration(char **argv, int argc); void sentinelIsRunning(void); /* redis-check-rdb & aof */