]> source.dussan.org Git - rspamd.git/commitdiff
Fix comparision operators.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 30 Apr 2015 14:57:47 +0000 (15:57 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 30 Apr 2015 14:57:47 +0000 (15:57 +0100)
src/libutil/expression.c
test/lua/unit/expressions.lua

index d4559e7651948ef59e18a96ae20c0c5e0afed1aa..7faebb5476432156b76694d4466ed72990cce615 100644 (file)
@@ -863,7 +863,7 @@ rspamd_ast_node_done (struct rspamd_expression_elt *elt,
 }
 
 static gint
-rspamd_ast_do_op (struct rspamd_expression_elt *elt, gint val, gint acc)
+rspamd_ast_do_op (struct rspamd_expression_elt *elt, gint val, gint acc, gint lim)
 {
        gint ret = val;
 
@@ -877,16 +877,16 @@ rspamd_ast_do_op (struct rspamd_expression_elt *elt, gint val, gint acc)
                ret = acc + val;
                break;
        case OP_GE:
-               ret = acc >= val;
+               ret = acc >= lim;
                break;
        case OP_GT:
-               ret = acc > val;
+               ret = acc > lim;
                break;
        case OP_LE:
-               ret = acc <= val;
+               ret = acc <= lim;
                break;
        case OP_LT:
-               ret = acc < val;
+               ret = acc < lim;
                break;
        case OP_MULT:
        case OP_AND:
@@ -980,7 +980,7 @@ rspamd_ast_process_node (struct rspamd_expression *expr, gint flags, GNode *node
                                acc = val;
                        }
 
-                       acc = rspamd_ast_do_op (elt, val, acc);
+                       acc = rspamd_ast_do_op (elt, val, acc, lim);
 
                        if (!(flags & RSPAMD_EXPRESSION_FLAG_NOOPT)) {
                                if (rspamd_ast_node_done (elt, parelt, acc, lim)) {
index 1dc92997ecb8519c394887cf0a06854a7c3ad93f..b2e66e8cc1eb5d1477387103cf187280b288753d 100644 (file)
@@ -85,6 +85,7 @@ context("Rspamd expressions", function()
        {'(A + B + C + D) > 1 && F || E', 1},
        {'(A + B + C + D) > 100 && F || !E', 0},
        {'F && ((A + B + C + D) > 1)', 0},
+       {'(E) && ((B + B + B + B) >= 1)', 0},
        {'!!C', 1},
     }
     for _,c in ipairs(cases) do