Skip to content

Commit a6fe74d

Browse files
martinhsvzimmerle
authored andcommitted
Fix memory leak of RuleMessages objects
1 parent 65ced72 commit a6fe74d

3 files changed

Lines changed: 8 additions & 6 deletions

File tree

‎CHANGES‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
v3.x.y - YYYY-MMM-DD (to be released)
22
-------------------------------------
33

4+
- Fix memory leak of RuleMessages objects
5+
[#2376 - @WGH-, @martinhsv]
46
- Produce not-supported error for ctl:forceRequestBodyVariable
57
and ctl:auditEngine
68
[#2376 - @WGH-, @martinhsv]

‎headers/modsecurity/transaction.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ class TransactionRuleMessageManagement {
343343
* of the actions: `log_data' and `msg'. These should be included on the
344344
* auditlogs.
345345
*/
346-
std::list<RuleMessage *> m_rulesMessages;
346+
std::list<std::shared_ptr<RuleMessage>> m_rulesMessages;
347347

348348
Transaction *m_transaction;
349349
};

‎src/transaction.cc‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ namespace modsecurity {
6464

6565

6666
RuleMessage *TransactionRuleMessageManagement::messageGetLast() {
67-
return m_rulesMessages.back();
67+
return m_rulesMessages.back().get();
6868
}
6969

7070
void TransactionRuleMessageManagement::logMatchLastRuleOnTheChain(const RuleWithActions *rule) {
71-
RuleMessage *rm = m_rulesMessages.back();
71+
RuleMessage *rm = m_rulesMessages.back().get();
7272

7373
rm->setRule(rule);
7474

@@ -85,13 +85,13 @@ void TransactionRuleMessageManagement::logMatchLastRuleOnTheChain(const RuleWith
8585
}
8686

8787
void TransactionRuleMessageManagement::messageNew() {
88-
m_rulesMessages.push_back(new RuleMessage(m_transaction));
88+
m_rulesMessages.push_back(std::make_shared<RuleMessage>(m_transaction));
8989
}
9090

9191
std::list<RuleMessage *> TransactionRuleMessageManagement::messageGetAll() {
9292
std::list<RuleMessage *> messages;
93-
for (RuleMessage *a : m_rulesMessages) {
94-
messages.push_back(a);
93+
for (auto iter = m_rulesMessages.begin(); iter != m_rulesMessages.end(); ++iter) {
94+
messages.push_back((*iter).get());
9595
}
9696
return messages;
9797
}

0 commit comments

Comments
 (0)