mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-11-16 17:41:52 +03:00
Removes memory leaks on the parse
- Parser location is now a custom class. It holds a shared pointer with the file name; If the parser fails, the resource is deleted. - To follow the parser change, the Rule class now holds the file name in a shared pointer instead of a unique pointer. As a shared pointer we avoid duplication of the file name in memory, plus, it frees itself when not in use anymore. - Operator init also accepting the filename as a shared pointer. - Driver is treating m_location was privative. Now it holds a std::list<std::shared_ptr<yy::seclang_parser::location_type>> instead of: std::list<yy::seclang_parser::location_type *>. - Fix: addSecRule on Driver() was changed from RuleWithAction to RuleWithOperator. - Minor changes on the regression and rules-check utility to force deletion of resources even when they fail. - Couple of virtual destructors were placed to force the shared pointer decrementing on shared variables. - Deleted constructors for copy were placed for the sake of readability.
This commit is contained in:
@@ -44,8 +44,8 @@ class Operator;
|
||||
|
||||
class Rule {
|
||||
public:
|
||||
Rule(std::unique_ptr<std::string> fileName, int lineNumber)
|
||||
: m_fileName(std::move(fileName)),
|
||||
Rule(std::shared_ptr<std::string> fileName, int lineNumber)
|
||||
: m_fileName(fileName),
|
||||
m_lineNumber(lineNumber),
|
||||
m_phase(modsecurity::Phases::RequestHeadersPhase)
|
||||
{ }
|
||||
|
||||
@@ -47,6 +47,17 @@ class Rules {
|
||||
using iterator=typename container::iterator;
|
||||
using const_iterator=typename container::const_iterator;
|
||||
|
||||
Rules()
|
||||
: m_rules()
|
||||
{ };
|
||||
|
||||
Rules(const Rules&) = delete;
|
||||
|
||||
virtual ~Rules() {
|
||||
m_rules.clear();
|
||||
}
|
||||
|
||||
|
||||
int append(Rules *from);
|
||||
|
||||
bool insert(const std::shared_ptr<Rule> &rule);
|
||||
|
||||
@@ -60,7 +60,8 @@ class RulesSet : public RulesSetProperties {
|
||||
#endif
|
||||
{ }
|
||||
|
||||
~RulesSet() { }
|
||||
~RulesSet()
|
||||
{ }
|
||||
|
||||
int loadFromUri(const char *uri);
|
||||
int loadRemote(const char *key, const char *uri);
|
||||
|
||||
@@ -47,6 +47,15 @@ class RulesSetPhases {
|
||||
using iterator = typename container::iterator;
|
||||
using const_iterator = typename container::const_iterator;
|
||||
|
||||
RulesSetPhases()
|
||||
: m_rulesAtPhase()
|
||||
{ }
|
||||
|
||||
RulesSetPhases(const RulesSetPhases&) = delete;
|
||||
|
||||
virtual ~RulesSetPhases()
|
||||
{ };
|
||||
|
||||
void insert(std::shared_ptr<Rule> rule);
|
||||
void append(RulesSetPhases *from);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user