From: Vsevolod Stakhov Date: Sat, 15 Jan 2022 12:25:02 +0000 (+0000) Subject: [Minor] Composites: Always register composite symbols X-Git-Tag: 3.2~97 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=77e7bc98e0312c64496414161071f2b2ca70085b;p=thirdparty%2Frspamd.git [Minor] Composites: Always register composite symbols --- diff --git a/src/libserver/composites/composites_manager.cxx b/src/libserver/composites/composites_manager.cxx index cbd460be6f..c73c5b5537 100644 --- a/src/libserver/composites/composites_manager.cxx +++ b/src/libserver/composites/composites_manager.cxx @@ -16,6 +16,7 @@ #include #include +#include #include "contrib/robin-hood/robin_hood.h" #include "composites.h" @@ -87,44 +88,43 @@ composites_manager::add_composite(std::string_view composite_name, const ucl_obj const auto &composite = new_composite(composite_name, expr, composite_expression); - double score; + auto score = isnan(cfg->unknown_weight) ? 0.0 : cfg->unknown_weight; val = ucl_object_lookup(obj, "score"); - if (val != nullptr && ucl_object_todouble_safe(val, &score)) { - /* Also set score in the metric */ - const auto *group = "composite"; - val = ucl_object_lookup(obj, "group"); - if (val != nullptr) { - group = ucl_object_tostring(val); - } + if (val != nullptr) { + ucl_object_todouble_safe(val, &score); + } - const auto *description = composite_expression; - val = ucl_object_lookup(obj, "description"); - if (val != nullptr) { - description = ucl_object_tostring(val); - } - else { - description = composite_expression; - } + /* Also set score in the metric */ + const auto *group = "composite"; + val = ucl_object_lookup(obj, "group"); + if (val != nullptr) { + group = ucl_object_tostring(val); + } - rspamd_config_add_symbol(cfg, composite_name.data(), score, - description, group, - 0, - ucl_object_get_priority(obj), /* No +1 as it is default... */ - 1); + const auto *description = composite_expression; + val = ucl_object_lookup(obj, "description"); + if (val != nullptr) { + description = ucl_object_tostring(val); + } - const auto *elt = ucl_object_lookup(obj, "groups"); - if (elt) { - const ucl_object_t *cur_gr; - auto *gr_it = ucl_object_iterate_new(elt); + rspamd_config_add_symbol(cfg, composite_name.data(), score, + description, group, + 0, + ucl_object_get_priority(obj), /* No +1 as it is default... */ + 1); - while ((cur_gr = ucl_object_iterate_safe(gr_it, true)) != nullptr) { - rspamd_config_add_symbol_group(cfg, composite_name.data(), - ucl_object_tostring(cur_gr)); - } + const auto *elt = ucl_object_lookup(obj, "groups"); + if (elt && ucl_object_type(elt) == UCL_ARRAY) { + const ucl_object_t *cur_gr; + auto *gr_it = ucl_object_iterate_new(elt); - ucl_object_iterate_free(gr_it); + while ((cur_gr = ucl_object_iterate_safe(gr_it, true)) != nullptr) { + rspamd_config_add_symbol_group(cfg, composite_name.data(), + ucl_object_tostring(cur_gr)); } + + ucl_object_iterate_free(gr_it); } val = ucl_object_lookup(obj, "policy"); @@ -160,6 +160,13 @@ composites_manager::add_composite(std::string_view composite_name, return nullptr; } + auto score = isnan(cfg->unknown_weight) ? 0.0 : cfg->unknown_weight; + rspamd_config_add_symbol(cfg, composite_name.data(), score, + composite_name.data(), "composite", + 0, + 0, + 1); + return new_composite(composite_name, expr, composite_expression).get(); }