}
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;
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:
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)) {
{'(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