Module: kamailio Branch: master Commit: c3b2eacbba1097ed3d40cff18ea2d51ebcad1c67 URL: https://github.com/kamailio/kamailio/commit/c3b2eacbba1097ed3d40cff18ea2d51e...
Author: MancaÈ George mancas.f.george@gmail.com Committer: MancaÈ George mancas.f.george@gmail.com Date: 2019-08-01T09:39:28Z
core: Fix the cfg framework variable input type default
What the affected line of code really wants to achieve is: if an accepted inputs type mask is not specified then default to accepting only the actual variable type. So we must mask the var type first, then shift it by `CFG_INPUT_SHIFT`, before or-ing it with the rest.
What happened before was that the entire type was shifted, and that included var type, input type and flags. What we end up with is some additional higher bits set (for flags). I actually discovered this while adding an additional flag that was meant to mark variables as private, only accessible through an internal API (not available to modules such as cfg_rpc).
---
Modified: src/core/cfg/cfg.c
---
Diff: https://github.com/kamailio/kamailio/commit/c3b2eacbba1097ed3d40cff18ea2d51e... Patch: https://github.com/kamailio/kamailio/commit/c3b2eacbba1097ed3d40cff18ea2d51e...
---
diff --git a/src/core/cfg/cfg.c b/src/core/cfg/cfg.c index 3822a9c94d..488d72f35a 100644 --- a/src/core/cfg/cfg.c +++ b/src/core/cfg/cfg.c @@ -94,7 +94,7 @@ int cfg_declare(char *group_name, cfg_def_t *def, void *values, int def_size,
/* verify the type of the input */ if (CFG_INPUT_MASK(def[i].type)==0) { - def[i].type |= def[i].type << CFG_INPUT_SHIFT; + def[i].type |= CFG_VAR_MASK(def[i].type) << CFG_INPUT_SHIFT; } else { if ((CFG_INPUT_MASK(def[i].type) != CFG_VAR_MASK(def[i].type) << CFG_INPUT_SHIFT) && (def[i].on_change_cb == 0)) {