Fix memory leak of RuleMessages objects

This commit is contained in:
martinhsv 2020-11-08 10:31:38 -08:00 committed by Felipe Zimmerle
parent 29364052cd
commit ab6754712c
3 changed files with 8 additions and 6 deletions

View File

@ -1,6 +1,8 @@
v3.x.y - YYYY-MMM-DD (to be released) v3.x.y - YYYY-MMM-DD (to be released)
------------------------------------- -------------------------------------
- Fix memory leak of RuleMessages objects
[#2376 - @WGH-, @martinhsv]
- Produce not-supported error for ctl:forceRequestBodyVariable - Produce not-supported error for ctl:forceRequestBodyVariable
and ctl:auditEngine and ctl:auditEngine
[#2376 - @WGH-, @martinhsv] [#2376 - @WGH-, @martinhsv]

View File

@ -343,7 +343,7 @@ class TransactionRuleMessageManagement {
* of the actions: `log_data' and `msg'. These should be included on the * of the actions: `log_data' and `msg'. These should be included on the
* auditlogs. * auditlogs.
*/ */
std::list<RuleMessage *> m_rulesMessages; std::list<std::shared_ptr<RuleMessage>> m_rulesMessages;
Transaction *m_transaction; Transaction *m_transaction;
}; };

View File

@ -64,11 +64,11 @@ namespace modsecurity {
RuleMessage *TransactionRuleMessageManagement::messageGetLast() { RuleMessage *TransactionRuleMessageManagement::messageGetLast() {
return m_rulesMessages.back(); return m_rulesMessages.back().get();
} }
void TransactionRuleMessageManagement::logMatchLastRuleOnTheChain(const RuleWithActions *rule) { void TransactionRuleMessageManagement::logMatchLastRuleOnTheChain(const RuleWithActions *rule) {
RuleMessage *rm = m_rulesMessages.back(); RuleMessage *rm = m_rulesMessages.back().get();
rm->setRule(rule); rm->setRule(rule);
@ -85,13 +85,13 @@ void TransactionRuleMessageManagement::logMatchLastRuleOnTheChain(const RuleWith
} }
void TransactionRuleMessageManagement::messageNew() { void TransactionRuleMessageManagement::messageNew() {
m_rulesMessages.push_back(new RuleMessage(m_transaction)); m_rulesMessages.push_back(std::make_shared<RuleMessage>(m_transaction));
} }
std::list<RuleMessage *> TransactionRuleMessageManagement::messageGetAll() { std::list<RuleMessage *> TransactionRuleMessageManagement::messageGetAll() {
std::list<RuleMessage *> messages; std::list<RuleMessage *> messages;
for (RuleMessage *a : m_rulesMessages) { for (auto iter = m_rulesMessages.begin(); iter != m_rulesMessages.end(); ++iter) {
messages.push_back(a); messages.push_back((*iter).get());
} }
return messages; return messages;
} }