Adds method init to Operator class

This commit is contained in:
Felipe Zimmerle 2015-07-27 22:43:45 -03:00
parent 7b4554216e
commit c2d33823f5
3 changed files with 11 additions and 2 deletions

View File

@ -35,11 +35,12 @@ class Operator {
param(param),
negation(negation) { }
virtual ~Operator() { }
std::string op;
std::string param;
bool negation;
virtual bool init(const char **error) { return true; }
virtual bool evaluate(Assay *assay);
virtual bool evaluate(Assay *assay, const std::string &str);
static Operator *instantiate(std::string op);

View File

@ -261,8 +261,14 @@ expression:
audit_log
| DIRECTIVE SPACE variables SPACE OPERATOR SPACE QUOTATION_MARK actions QUOTATION_MARK
{
Operator *op = Operator::instantiate($5);
const char *error = NULL;
if (op->init(&error) == false) {
driver.parserError << error;
YYERROR;
}
Rule *rule = new Rule(
/* op */ Operator::instantiate($5),
/* op */ op,
/* variables */ $3,
/* actions */ $8
);

View File

@ -54,9 +54,11 @@ void print_help() {
void perform_unit_test(UnitTest *t, ModSecurityTestResults<UnitTest>* res) {
const char *error = NULL;
ModSecurity::operators::Operator *op =
ModSecurity::operators::Operator::instantiate("\"@" + t->name + \
" " + t->param + "\"");
op->init(&error);
int ret = op->evaluate(NULL, t->input);
if (ret != t->ret) {