diff --git a/headers/modsecurity/rule.h b/headers/modsecurity/rule.h index 12d7ff79..a5ca9f92 100644 --- a/headers/modsecurity/rule.h +++ b/headers/modsecurity/rule.h @@ -54,7 +54,7 @@ class Rule { Rule(operators::Operator *_op, variables::Variables *_variables, std::vector *_actions, - std::string fileName, + std::unique_ptr fileName, int lineNumber); explicit Rule(const std::string &marker); virtual ~Rule(); @@ -128,7 +128,7 @@ class Rule { operators::Operator *m_op; std::unique_ptr m_chainedRuleChild; Rule *m_chainedRuleParent; - std::string m_fileName; + std::shared_ptr m_fileName; std::string m_marker; std::string m_rev; std::string m_ver; diff --git a/headers/modsecurity/rule_message.h b/headers/modsecurity/rule_message.h index f86df667..0ddfc883 100644 --- a/headers/modsecurity/rule_message.h +++ b/headers/modsecurity/rule_message.h @@ -104,7 +104,7 @@ class RuleMessage { std::string m_reference; std::string m_rev; Rule *m_rule; - std::string m_ruleFile; + std::shared_ptr m_ruleFile; int m_ruleId; int m_ruleLine; bool m_saveMessage; diff --git a/src/parser/seclang-parser.cc b/src/parser/seclang-parser.cc index fb2acdf2..aecd5d14 100644 --- a/src/parser/seclang-parser.cc +++ b/src/parser/seclang-parser.cc @@ -2318,7 +2318,7 @@ namespace yy { /* op */ op, /* variables */ v, /* actions */ a, - /* file name */ *yystack_[3].location.end.filename, + /* file name */ std::unique_ptr(new std::string(*yystack_[3].location.end.filename)), /* line number */ yystack_[3].location.end.line )); @@ -2341,7 +2341,7 @@ namespace yy { /* op */ yystack_[0].value.as < std::unique_ptr > ().release(), /* variables */ v, /* actions */ NULL, - /* file name */ *yystack_[2].location.end.filename, + /* file name */ std::unique_ptr(new std::string(*yystack_[2].location.end.filename)), /* line number */ yystack_[2].location.end.line )); if (driver.addSecRule(std::move(rule)) == false) { @@ -2362,7 +2362,7 @@ namespace yy { /* op */ NULL, /* variables */ NULL, /* actions */ a, - /* file name */ *yystack_[1].location.end.filename, + /* file name */ std::unique_ptr(new std::string(*yystack_[1].location.end.filename)), /* line number */ yystack_[1].location.end.line )); driver.addSecAction(std::move(rule)); @@ -2381,7 +2381,7 @@ namespace yy { std::unique_ptr r(new RuleScript( /* path to script */ yystack_[1].value.as < std::string > (), /* actions */ a, - /* file name */ *yystack_[1].location.end.filename, + /* file name */ std::unique_ptr(new std::string(*yystack_[1].location.end.filename)), /* line number */ yystack_[1].location.end.line )); diff --git a/src/parser/seclang-parser.yy b/src/parser/seclang-parser.yy index 0aaf33c9..f5273c0d 100644 --- a/src/parser/seclang-parser.yy +++ b/src/parser/seclang-parser.yy @@ -1080,7 +1080,7 @@ expression: /* op */ op, /* variables */ v, /* actions */ a, - /* file name */ *@1.end.filename, + /* file name */ std::unique_ptr(new std::string(*@1.end.filename)), /* line number */ @1.end.line )); @@ -1099,7 +1099,7 @@ expression: /* op */ $3.release(), /* variables */ v, /* actions */ NULL, - /* file name */ *@1.end.filename, + /* file name */ std::unique_ptr(new std::string(*@1.end.filename)), /* line number */ @1.end.line )); if (driver.addSecRule(std::move(rule)) == false) { @@ -1116,7 +1116,7 @@ expression: /* op */ NULL, /* variables */ NULL, /* actions */ a, - /* file name */ *@1.end.filename, + /* file name */ std::unique_ptr(new std::string(*@1.end.filename)), /* line number */ @1.end.line )); driver.addSecAction(std::move(rule)); @@ -1131,7 +1131,7 @@ expression: std::unique_ptr r(new RuleScript( /* path to script */ $1, /* actions */ a, - /* file name */ *@1.end.filename, + /* file name */ std::unique_ptr(new std::string(*@1.end.filename)), /* line number */ @1.end.line )); diff --git a/src/rule.cc b/src/rule.cc index 8b516cf0..b9efefa7 100644 --- a/src/rule.cc +++ b/src/rule.cc @@ -70,7 +70,7 @@ Rule::Rule(const std::string &marker) m_op(NULL), m_chainedRuleChild(nullptr), m_chainedRuleParent(NULL), - m_fileName(""), + /* m_fileName(""), */ m_marker(marker), m_rev(""), m_ver(""), @@ -83,7 +83,7 @@ Rule::Rule(const std::string &marker) Rule::Rule(Operator *_op, variables::Variables *_variables, std::vector *actions, - std::string fileName, + std::unique_ptr fileName, int lineNumber) : m_theDisruptiveAction(nullptr), m_logData(nullptr), @@ -103,7 +103,7 @@ Rule::Rule(Operator *_op, m_op(_op), m_chainedRuleChild(nullptr), m_chainedRuleParent(NULL), - m_fileName(fileName), + m_fileName(std::move(fileName)), m_marker(""), m_rev(""), m_ver(""), diff --git a/src/rule_message.cc b/src/rule_message.cc index e19f4b49..e0aaf9b6 100644 --- a/src/rule_message.cc +++ b/src/rule_message.cc @@ -26,7 +26,7 @@ namespace modsecurity { std::string RuleMessage::_details(const RuleMessage *rm) { std::string msg; - msg.append(" [file \"" + std::string(rm->m_ruleFile) + "\"]"); + msg.append(" [file \"" + std::string(*rm->m_ruleFile.get()) + "\"]"); msg.append(" [line \"" + std::to_string(rm->m_ruleLine) + "\"]"); msg.append(" [id \"" + std::to_string(rm->m_ruleId) + "\"]"); msg.append(" [rev \"" + rm->m_rev + "\"]"); diff --git a/src/rule_script.h b/src/rule_script.h index 533b9c13..5c95277b 100644 --- a/src/rule_script.h +++ b/src/rule_script.h @@ -46,9 +46,9 @@ class RuleScript : public Rule { public: RuleScript(const std::string &name, std::vector *actions, - const std::string &fileName, + std::unique_ptr fileName, int lineNumber) - : Rule(NULL, NULL, actions, fileName, lineNumber), + : Rule(NULL, NULL, actions, std::move(fileName), lineNumber), m_name(name) { } bool init(std::string *err); diff --git a/src/transaction.cc b/src/transaction.cc index e4879077..cd20cd91 100644 --- a/src/transaction.cc +++ b/src/transaction.cc @@ -1764,7 +1764,7 @@ std::string Transaction::toJSON(int parts) { LOGFY_ADD("match", a.m_match.c_str()); LOGFY_ADD("reference", a.m_reference.c_str()); LOGFY_ADD("ruleId", std::to_string(a.m_ruleId).c_str()); - LOGFY_ADD("file", a.m_ruleFile.c_str()); + LOGFY_ADD("file", a.m_ruleFile->c_str()); LOGFY_ADD("lineNumber", std::to_string(a.m_ruleLine).c_str()); LOGFY_ADD("data", a.m_data.c_str()); LOGFY_ADD("severity", std::to_string(a.m_severity).c_str());