From 85dea8048aed1b2d74eec57b30155898892daa37 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Mon, 11 Jun 2012 17:38:47 +0200 Subject: bugfix: expression-based filters with AND/OR could segfault due to a problem with boolean shortcut operations. From the user's perspective, the segfault is almost non-deterministic (it occurs when a shortcut is used). Thanks to Lars Peterson for providing the initial bug report and his support in solving it. --- grammar/rainerscript.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'grammar/rainerscript.c') diff --git a/grammar/rainerscript.c b/grammar/rainerscript.c index 66932c77..a5cc10c2 100644 --- a/grammar/rainerscript.c +++ b/grammar/rainerscript.c @@ -1129,8 +1129,9 @@ cnfexprEval(struct cnfexpr *expr, struct var *ret, void* usrptr) ret->d.n = 1ll; else ret->d.n = 0ll; + if(r.datatype == 'S') es_deleteStr(r.d.estr); } - FREE_BOTH_RET; + if(l.datatype == 'S') es_deleteStr(l.d.estr); break; case AND: cnfexprEval(expr->l, &l, usrptr); @@ -1141,10 +1142,11 @@ cnfexprEval(struct cnfexpr *expr, struct var *ret, void* usrptr) ret->d.n = 1ll; else ret->d.n = 0ll; + if(r.datatype == 'S') es_deleteStr(r.d.estr); } else { ret->d.n = 0ll; } - FREE_BOTH_RET; + if(l.datatype == 'S') es_deleteStr(l.d.estr); break; case NOT: cnfexprEval(expr->r, &r, usrptr); -- cgit v1.2.3