|
|
@@ -201,7 +201,7 @@ rspamd_composite_process_single_symbol (struct composites_data *cd, |
|
|
|
struct rspamd_composite *ncomp; |
|
|
|
struct rspamd_task *task = cd->task; |
|
|
|
|
|
|
|
if ((ms = rspamd_task_find_symbol_result (cd->task, sym, NULL)) == NULL) { |
|
|
|
if ((ms = rspamd_task_find_symbol_result (cd->task, sym, cd->metric_res)) == NULL) { |
|
|
|
msg_debug_composites ("not found symbol %s in composite %s", sym, |
|
|
|
cd->composite->sym); |
|
|
|
if ((ncomp = |
|
|
@@ -225,14 +225,16 @@ rspamd_composite_process_single_symbol (struct composites_data *cd, |
|
|
|
cd->composite = saved; |
|
|
|
clrbit (cd->checked, cd->composite->id * 2); |
|
|
|
|
|
|
|
ms = rspamd_task_find_symbol_result (cd->task, sym, NULL); |
|
|
|
ms = rspamd_task_find_symbol_result (cd->task, sym, |
|
|
|
cd->metric_res); |
|
|
|
} |
|
|
|
else { |
|
|
|
/* |
|
|
|
* XXX: in case of cyclic references this would return 0 |
|
|
|
*/ |
|
|
|
if (isset (cd->checked, ncomp->id * 2 + 1)) { |
|
|
|
ms = rspamd_task_find_symbol_result (cd->task, sym, NULL); |
|
|
|
ms = rspamd_task_find_symbol_result (cd->task, sym, |
|
|
|
cd->metric_res); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@@ -396,7 +398,7 @@ rspamd_composite_expr_process (void *ud, |
|
|
|
if (isset (cd->checked, cd->composite->id * 2)) { |
|
|
|
/* We have already checked this composite, so just return its value */ |
|
|
|
if (isset (cd->checked, cd->composite->id * 2 + 1)) { |
|
|
|
ms = rspamd_task_find_symbol_result (cd->task, sym, NULL); |
|
|
|
ms = rspamd_task_find_symbol_result (cd->task, sym, cd->metric_res); |
|
|
|
} |
|
|
|
|
|
|
|
if (ms) { |
|
|
@@ -563,7 +565,8 @@ composites_foreach_callback (gpointer key, gpointer value, void *data) |
|
|
|
clrbit (cd->checked, comp->id * 2 + 1); |
|
|
|
} |
|
|
|
else { |
|
|
|
if (rspamd_task_find_symbol_result (cd->task, key, NULL) != NULL) { |
|
|
|
if (rspamd_task_find_symbol_result (cd->task, key, |
|
|
|
cd->metric_res) != NULL) { |
|
|
|
/* Already set, no need to check */ |
|
|
|
msg_debug_composites ("composite %s is already in metric " |
|
|
|
"in composites bitfield", cd->composite->sym); |
|
|
@@ -652,7 +655,7 @@ composites_remove_symbols (gpointer key, gpointer value, gpointer data) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
ms = rspamd_task_find_symbol_result (task, rd->sym, NULL); |
|
|
|
ms = rspamd_task_find_symbol_result (task, rd->sym, cd->metric_res); |
|
|
|
|
|
|
|
if (has_valid_op && ms && !(ms->flags & RSPAMD_SYMBOL_RESULT_IGNORED)) { |
|
|
|
|
|
|
@@ -697,10 +700,14 @@ composites_metric_callback (struct rspamd_scan_result *metric_res, |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
rspamd_make_composites (struct rspamd_task *task) |
|
|
|
rspamd_composites_process_task (struct rspamd_task *task) |
|
|
|
{ |
|
|
|
if (task->result && !RSPAMD_TASK_IS_SKIPPED (task)) { |
|
|
|
composites_metric_callback (task->result, task); |
|
|
|
struct rspamd_scan_result *mres; |
|
|
|
|
|
|
|
DL_FOREACH (task->result, mres) { |
|
|
|
composites_metric_callback (mres, task); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|