diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2012-06-11 17:39:44 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2012-06-11 17:39:44 +0200 |
commit | ff429be0f6254d40c52150dbf8142330ba754ea7 (patch) | |
tree | 117944b9fc310f7f1c784dd11dd1e8cefac6de16 | |
parent | d5585524b7c749c1bbecf1e68b06269be82583e2 (diff) | |
parent | 85dea8048aed1b2d74eec57b30155898892daa37 (diff) | |
download | rsyslog-ff429be0f6254d40c52150dbf8142330ba754ea7.tar.gz rsyslog-ff429be0f6254d40c52150dbf8142330ba754ea7.tar.bz2 rsyslog-ff429be0f6254d40c52150dbf8142330ba754ea7.zip |
Merge branch 'beta'
Conflicts:
ChangeLog
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | grammar/rainerscript.c | 6 |
2 files changed, 12 insertions, 2 deletions
@@ -8,6 +8,14 @@ Version 6.5.0 [devel] 2012-0?-?? - added new 0mq plugins (via czmq lib) Thanks to David Kelly for contributing these modules --------------------------------------------------------------------------- +Version 6.3.11 [BETA] 2012-06-?? +- 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. +--------------------------------------------------------------------------- Version 6.3.10 [BETA] 2012-06-04 - bugfix: delayble source could block action queue, even if there was a disk queue associated with it. The root cause of this problem was 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); |