From 092cfca5224e8e88053cd5b8a7b82f0f14b17011 Mon Sep 17 00:00:00 2001 From: Oran Agra Date: Wed, 16 Sep 2020 20:21:04 +0300 Subject: [PATCH] Add printf attribute and fix warnings and a minor bug (#7803) The fix in error handling of rdbGenericLoadStringObject is an actual bugfix --- src/rdb.c | 11 +++++++---- src/server.h | 5 +++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/rdb.c b/src/rdb.c index 80fe3c5a6..37e09ef96 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -52,6 +52,9 @@ extern int rdbCheckMode; void rdbCheckError(const char *fmt, ...); void rdbCheckSetError(const char *fmt, ...); +#ifdef __GNUC__ +void rdbReportError(int corruption_error, int linenum, char *reason, ...) __attribute__ ((format (printf, 3, 4))); +#endif void rdbReportError(int corruption_error, int linenum, char *reason, ...) { va_list ap; char msg[1024]; @@ -487,7 +490,7 @@ void *rdbGenericLoadStringObject(rio *rdb, int flags, size_t *lenptr) { int plain = flags & RDB_LOAD_PLAIN; int sds = flags & RDB_LOAD_SDS; int isencoded; - uint64_t len; + unsigned long long len; len = rdbLoadLen(rdb,&isencoded); if (isencoded) { @@ -499,8 +502,8 @@ void *rdbGenericLoadStringObject(rio *rdb, int flags, size_t *lenptr) { case RDB_ENC_LZF: return rdbLoadLzfStringObject(rdb,flags,lenptr); default: - rdbExitReportCorruptRDB("Unknown RDB string encoding type %d",len); - return NULL; /* Never reached. */ + rdbExitReportCorruptRDB("Unknown RDB string encoding type %llu",len); + return NULL; } } @@ -2198,7 +2201,7 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) { if (luaCreateFunction(NULL,server.lua,auxval) == NULL) { rdbExitReportCorruptRDB( "Can't load Lua script from RDB file! " - "BODY: %s", auxval->ptr); + "BODY: %s", (char*)auxval->ptr); } } else if (!strcasecmp(auxkey->ptr,"redis-ver")) { serverLog(LL_NOTICE,"Loading RDB produced by version %s", diff --git a/src/server.h b/src/server.h index ae2cecf31..8cba2f9b5 100644 --- a/src/server.h +++ b/src/server.h @@ -2464,7 +2464,12 @@ void *realloc(void *ptr, size_t size) __attribute__ ((deprecated)); /* Debugging stuff */ void _serverAssertWithInfo(const client *c, const robj *o, const char *estr, const char *file, int line); void _serverAssert(const char *estr, const char *file, int line); +#ifdef __GNUC__ +void _serverPanic(const char *file, int line, const char *msg, ...) + __attribute__ ((format (printf, 3, 4))); +#else void _serverPanic(const char *file, int line, const char *msg, ...); +#endif void serverLogObjectDebugInfo(const robj *o); void sigsegvHandler(int sig, siginfo_t *info, void *secret); sds genRedisInfoString(const char *section);