From: Tomas Krizek Date: Thu, 8 Jul 2021 11:30:22 +0000 (+0200) Subject: logging: fix get_log_group() X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2900c9dec5a449c0b61fc6eee5a85d4563c8cf71;p=thirdparty%2Fknot-resolver.git logging: fix get_log_group() To ensure all log groups have been properly defined, iterate over the entire enum. If a value is missing, assert will be triggered. Also fixes groups with number >=32 (32bit value was used to test whether group is set before). --- diff --git a/daemon/engine.c b/daemon/engine.c index 95bdc69d0..8207474d6 100644 --- a/daemon/engine.c +++ b/daemon/engine.c @@ -217,17 +217,17 @@ static int l_del_log_group(lua_State *L) static int l_get_log_group(lua_State *L) { - int grp = 1; - char *name = kr_log_grp2name(grp); + char* name; lua_newtable(L); - while (name) { + for (int grp = LOG_GRP_SYSTEM; grp <= LOG_GRP_DEVEL; grp++) { + name = kr_log_grp2name(grp); + if (kr_fails_assert(name)) + continue; if (kr_log_group_is_set(grp)) { lua_pushboolean(L, true); lua_setfield(L, -2, name); } - ++grp; - name = kr_log_grp2name(grp); } return 1; diff --git a/lib/log.c b/lib/log.c index 5ccfc6616..7f556a05c 100644 --- a/lib/log.c +++ b/lib/log.c @@ -81,7 +81,7 @@ syslog_code_t prioritynames[] = { }; #endif -int kr_log_group_is_set(log_groups_t group) +log_groups_t kr_log_group_is_set(log_groups_t group) { return kr_log_groups & (1ULL << group); } @@ -145,6 +145,9 @@ char *kr_log_level2name(log_level_t level) log_level_t kr_log_name2level(const char *name) { + if (kr_fails_assert(name)) + return -1; + for (int i = 0; prioritynames[i].c_name; ++i) { if (strcmp(prioritynames[i].c_name, name) == 0) @@ -167,7 +170,7 @@ char *kr_log_grp2name(log_groups_t group) log_groups_t kr_log_name2grp(const char *name) { - if (!name) + if (kr_fails_assert(name)) return 0; for (int i = 0; log_group_names[i].g_name; ++i) diff --git a/lib/log.h b/lib/log.h index efd17bc8a..e50b6d2ca 100644 --- a/lib/log.h +++ b/lib/log.h @@ -30,7 +30,7 @@ typedef struct { /* Don't forget add *_TAG below, log_group_names[] item (log.c) and generate * new kres-gen.lua */ enum kr_log_groups_type { - LOG_GRP_SYSTEM = 1, + LOG_GRP_SYSTEM = 1, /* Must be first in enum. */ LOG_GRP_CACHE, LOG_GRP_IO, LOG_GRP_NETWORK, @@ -118,7 +118,7 @@ enum kr_log_groups_type { KR_EXPORT extern log_groups_t kr_log_groups; KR_EXPORT -int kr_log_group_is_set(log_groups_t group); +log_groups_t kr_log_group_is_set(log_groups_t group); KR_EXPORT void kr_log_add_group(log_groups_t group); KR_EXPORT