]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Update composites logic.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 21 Mar 2015 21:48:55 +0000 (21:48 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 21 Mar 2015 21:48:55 +0000 (21:48 +0000)
src/libmime/filter.c
src/libmime/filter.h

index 5ad16216310c516a1a6c482ff83ec7eeece109ef..32e63f6a0cbdb9e9a0a70d527de93e40b5cbe1b6 100644 (file)
@@ -459,6 +459,12 @@ rspamd_composite_expr_process (gpointer input, rspamd_expression_atom_t *atom)
        gint ret = 0, rc = 0;
        gchar t;
 
+       if (isset (cd->checked, cd->composite->id * 2)) {
+               /* We have already checked this composite, so just return its value */
+               rc = isset (cd->checked, cd->composite->id * 2 + 1);
+               return rc;
+       }
+
        if (*sym == '~' || *sym == '-') {
                t = *sym ++;
        }
@@ -513,6 +519,8 @@ rspamd_composite_expr_process (gpointer input, rspamd_expression_atom_t *atom)
                                        rd);
                }
        }
+
+       return rc;
 }
 
 /*
@@ -527,7 +535,7 @@ rspamd_composite_expr_priority (rspamd_expression_atom_t *atom)
 static void
 rspamd_composite_expr_destroy (rspamd_expression_atom_t *atom)
 {
-
+       /* Composite atoms are destroyed just with the pool */
 }
 
 static gint
@@ -541,9 +549,24 @@ remove_compare_data (gconstpointer a, gconstpointer b)
 static void
 composites_foreach_callback (gpointer key, gpointer value, void *data)
 {
+       struct composites_data *cd = data;
+       struct rspamd_composite *comp = value;
+       gint rc;
 
-}
+       cd->composite = comp;
 
+       rc = rspamd_process_expression (comp->expr, cd);
+
+       /* Checked bit */
+       setbit (cd->checked, comp->id * 2);
+       /* Result bit */
+       if (rc) {
+               setbit (cd->checked, comp->id * 2 + 1);
+       }
+       else {
+               clrbit (cd->checked, comp->id * 2 + 1);
+       }
+}
 
 
 static gboolean
index 41093b05d0f8be2c97fa2dad90fd5ef0670c745b..3eef175256e0e8ad56212dd8b84e3aab685d3a9d 100644 (file)
@@ -71,6 +71,11 @@ struct metric_result {
        double grow_factor;                             /**< current grow factor                                        */
 };
 
+
+/**
+ * Subr for composite expressions
+ */
+extern const struct rspamd_atom_subr composite_expr_subr;
 /**
  * Composite structure
  */