]> source.dussan.org Git - rspamd.git/commitdiff
Fix some priority issues in expressions.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 24 Mar 2015 17:30:00 +0000 (17:30 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 24 Mar 2015 17:30:00 +0000 (17:30 +0000)
src/libutil/expression.c
test/lua/unit/expressions.lua

index 350a9aebf8b6d34ad4bc071b8cb7a01d5f1eb071..5c057734c402717becd2d436bd7c54a1e49bcc41 100644 (file)
@@ -110,20 +110,22 @@ rspamd_expr_logic_priority (enum rspamd_expression_op op)
 
        switch (op) {
        case OP_NOT:
-               ret = 5;
-               break;
-       case OP_MULT:
-       case OP_AND:
-               ret = 4;
+               ret = 6;
                break;
        case OP_PLUS:
-       case OP_OR:
-               ret = 3;
+               ret = 5;
                break;
        case OP_GE:
        case OP_GT:
        case OP_LE:
        case OP_LT:
+               ret = 4;
+               break;
+       case OP_MULT:
+       case OP_AND:
+               ret = 3;
+               break;
+       case OP_OR:
                ret = 2;
                break;
        case OP_OBRACE:
@@ -322,6 +324,7 @@ rspamd_parse_expression (const gchar *line, gsize len,
                len = strlen (line);
        }
 
+       memset (&elt, 0, sizeof (elt));
        num_re = rspamd_regexp_cache_create (NULL, "/^\\d+(\\s+|[)]|$)/", NULL, NULL);
 
        p = line;
index 2577686186ae19d3e2987ceeb010fd496dfc8732..d75e09ebb93424afc0bcfb9b6c62f8f8df616cd9 100644 (file)
@@ -60,7 +60,7 @@ context("Rspamd expressions", function()
   test("Expression process function", function()
     local function process_func(token, input)
     
-      print(token)
+      --print(token)
       local t = input[token]
       
       if t then return 1 end
@@ -81,6 +81,8 @@ context("Rspamd expressions", function()
        {'A & (!B | C)', 1},
        {'A + B + C + D + E + F >= 2', 1},
        {'((A + B + C + D) > 1) & F', 0},
+       {'(A + B + C + D) > 1 && F || E', 1},
+       {'(A + B + C + D) > 100 && F || !E', 0},
        {'!!C', 1},
     }
     for _,c in ipairs(cases) do
@@ -88,6 +90,7 @@ context("Rspamd expressions", function()
         {parse_func, process_func}, pool)
 
       assert_not_nil(expr, "Cannot parse " .. c[1])
+     --print(expr)
       res = expr:process(atoms)
       assert_equal(res, c[2], string.format("Processed expr '%s' returned '%d', expected: '%d'",
         expr:to_string(), res, c[2]))