diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2013-02-08 15:29:38 +0100 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2013-02-08 15:29:38 +0100 |
commit | 1a2c9eab35eff0c3698eacb1f2d10b63e678f658 (patch) | |
tree | 8aa0fff73420c82f098179adb18fcbe30244f2d1 | |
parent | e082cb074293bf2df5fd13fb79845dc7e44298b8 (diff) | |
download | rsyslog-1a2c9eab35eff0c3698eacb1f2d10b63e678f658.tar.gz rsyslog-1a2c9eab35eff0c3698eacb1f2d10b63e678f658.tar.bz2 rsyslog-1a2c9eab35eff0c3698eacb1f2d10b63e678f658.zip |
bugfix: script == comparison did not work properly on JSON objects
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | grammar/rainerscript.c | 23 |
2 files changed, 24 insertions, 0 deletions
@@ -1,6 +1,7 @@ --------------------------------------------------------------------------- Version 7.3.7 [devel] 2013-02-?? - bugfix: mmjsonparse segfault if new-style config was used +- bugfix: script == comparison did not work properly on JSON objects --------------------------------------------------------------------------- Version 7.3.6 [devel] 2013-01-28 - greatly improved speed of large-array [N]EQ RainerScript comparisons diff --git a/grammar/rainerscript.c b/grammar/rainerscript.c index 69f77c50..83ed7680 100644 --- a/grammar/rainerscript.c +++ b/grammar/rainerscript.c @@ -1475,6 +1475,29 @@ cnfexprEval(struct cnfexpr *expr, struct var *ret, void* usrptr) } if(r.datatype == 'S') es_deleteStr(r.d.estr); } + } else if(l.datatype == 'J') { + estr_l = var2String(&l, &bMustFree); + if(expr->r->nodetype == 'S') { + ret->d.n = !es_strcmp(estr_l, ((struct cnfstringval*)expr->r)->estr); /*CMP*/ + } else if(expr->r->nodetype == 'A') { + ret->d.n = evalStrArrayCmp(estr_l, (struct cnfarray*) expr->r, CMP_EQ); + } else { + cnfexprEval(expr->r, &r, usrptr); + if(r.datatype == 'S') { + ret->d.n = !es_strcmp(estr_l, r.d.estr); /*CMP*/ + } else { + n_l = var2Number(&l, &convok_l); + if(convok_l) { + ret->d.n = (n_l == r.d.n); /*CMP*/ + } else { + estr_r = var2String(&r, &bMustFree); + ret->d.n = !es_strcmp(estr_l, estr_r); /*CMP*/ + if(bMustFree) es_deleteStr(estr_r); + } + } + if(r.datatype == 'S') es_deleteStr(r.d.estr); + } + if(bMustFree) es_deleteStr(estr_l); } else { cnfexprEval(expr->r, &r, usrptr); if(r.datatype == 'S') { |