diff --git a/src/rule.cc b/src/rule.cc index 2dfb35a8..15b54183 100644 --- a/src/rule.cc +++ b/src/rule.cc @@ -306,7 +306,7 @@ bool Rule::evaluate(Transaction *trasn) { Variable *variable = variables->at(i); if (variable->m_isExclusion) { std::vector z; - variable->evaluateInternal(trasn, &z); + variable->evaluateInternal(trasn, this, &z); for (auto &y : z) { exclusions.push_back(y->m_key); } @@ -322,7 +322,7 @@ bool Rule::evaluate(Transaction *trasn) { } std::vector e; - variable->evaluateInternal(trasn, &e); + variable->evaluateInternal(trasn, this, &e); for (auto &v : e) { if (std::find(exclusions.begin(), exclusions.end(), diff --git a/src/variables/variable.h b/src/variables/variable.h index 11c3361e..a625a994 100644 --- a/src/variables/variable.h +++ b/src/variables/variable.h @@ -18,6 +18,7 @@ #include #include #include "modsecurity/transaction.h" +#include "modsecurity/rule.h" #ifndef SRC_VARIABLES_VARIABLE_H_ #define SRC_VARIABLES_VARIABLE_H_ @@ -66,14 +67,29 @@ class Variable { static std::string to_s(std::vector *variables); + virtual std::vector *evaluate(Transaction *transaction); + + virtual void evaluateInternal(Transaction *transaction, + std::vector *l); + + virtual void evaluateInternal(Transaction *transaction, + Rule *rule, + std::vector *l) { + evaluateInternal(transaction, l); + } + + virtual void evaluate(Transaction *transaction, std::vector *l); - virtual void evaluateInternal(Transaction *transaction, - std::vector *l); + virtual void evaluate(Transaction *transaction, + Rule *rule, + std::vector *l) { + evaluate(transaction, l); + } std::string m_name;