From: Vsevolod Stakhov Date: Thu, 30 Apr 2015 14:57:47 +0000 (+0100) Subject: Fix comparision operators. X-Git-Tag: 0.9.0~118 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e94fe5faba0b43fa9685988e0290c5c84e2ff048;p=thirdparty%2Frspamd.git Fix comparision operators. --- diff --git a/src/libutil/expression.c b/src/libutil/expression.c index d4559e7651..7faebb5476 100644 --- a/src/libutil/expression.c +++ b/src/libutil/expression.c @@ -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)) { diff --git a/test/lua/unit/expressions.lua b/test/lua/unit/expressions.lua index 1dc92997ec..b2e66e8cc1 100644 --- a/test/lua/unit/expressions.lua +++ b/test/lua/unit/expressions.lua @@ -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