Avoid evaluating log arguments when log filtered by level. (#8685)

This commit is contained in:
yoav-steinberg 2021-03-24 08:22:12 +02:00 committed by GitHub
parent a2af2a306b
commit d026647f4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 5 deletions

View File

@ -1161,12 +1161,10 @@ void serverLogRaw(int level, const char *msg) {
/* Like serverLogRaw() but with printf-alike support. This is the function that /* Like serverLogRaw() but with printf-alike support. This is the function that
* is used across the code. The raw version is only used in order to dump * is used across the code. The raw version is only used in order to dump
* the INFO output on crash. */ * the INFO output on crash. */
void serverLog(int level, const char *fmt, ...) { void _serverLog(int level, const char *fmt, ...) {
va_list ap; va_list ap;
char msg[LOG_MAX_LEN]; char msg[LOG_MAX_LEN];
if ((level&0xff) < server.verbosity) return;
va_start(ap, fmt); va_start(ap, fmt);
vsnprintf(msg, sizeof(msg), fmt, ap); vsnprintf(msg, sizeof(msg), fmt, ap);
va_end(ap); va_end(ap);

View File

@ -2210,10 +2210,10 @@ void preventCommandAOF(client *c);
void preventCommandReplication(client *c); void preventCommandReplication(client *c);
int prepareForShutdown(int flags); int prepareForShutdown(int flags);
#ifdef __GNUC__ #ifdef __GNUC__
void serverLog(int level, const char *fmt, ...) void _serverLog(int level, const char *fmt, ...)
__attribute__((format(printf, 2, 3))); __attribute__((format(printf, 2, 3)));
#else #else
void serverLog(int level, const char *fmt, ...); void _serverLog(int level, const char *fmt, ...);
#endif #endif
void serverLogRaw(int level, const char *msg); void serverLogRaw(int level, const char *msg);
void serverLogFromHandler(int level, const char *msg); void serverLogFromHandler(int level, const char *msg);
@ -2719,6 +2719,13 @@ void killIOThreads(void);
void killThreads(void); void killThreads(void);
void makeThreadKillable(void); void makeThreadKillable(void);
/* Use macro for checking log level to avoid evaluating arguments in cases log
* should be ignored due to low level. */
#define serverLog(level, ...) do {\
if (((level)&0xff) < server.verbosity) break;\
_serverLog(level, __VA_ARGS__);\
} while(0)
/* TLS stuff */ /* TLS stuff */
void tlsInit(void); void tlsInit(void);
void tlsCleanup(void); void tlsCleanup(void);