Skip to content

Commit 8cfb289

Browse files
committed
Lets reserve some memory for rule message
1 parent a609249 commit 8cfb289

File tree

2 files changed

+42
-33
lines changed

2 files changed

+42
-33
lines changed

headers/modsecurity/rule_message.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@ class RuleMessage {
8888
return log(rm, 0);
8989
}
9090

91-
static inline void _details(const RuleMessage *rm, std::string *msg);
92-
static inline void _errorLogTail(const RuleMessage *rm, std::string *msg);
91+
static std::string _details(const RuleMessage *rm);
92+
static std::string _errorLogTail(const RuleMessage *rm);
9393

9494
int m_accuracy;
9595
std::shared_ptr<std::string> m_clientIpAddress;

src/rule_message.cc

Lines changed: 40 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -23,35 +23,43 @@
2323
namespace modsecurity {
2424

2525

26-
inline void RuleMessage::_details(const RuleMessage *rm, std::string *msg) {
27-
*msg += " [file \"" + std::string(*rm->m_ruleFile.get()) + "\"]" \
28-
" [line \"" + std::to_string(rm->m_ruleLine) + "\"]" \
29-
" [id \"" + std::to_string(rm->m_ruleId) + "\"]" \
30-
" [rev \"" + rm->m_rev + "\"]" \
31-
" [msg \"" + rm->m_message + "\"]" \
32-
" [data \"" + utils::string::limitTo(200, rm->m_data) + "\"]" \
33-
" [severity \"" + std::to_string(rm->m_severity) + "\"]" \
34-
" [ver \"" + rm->m_ver + "\"]" \
35-
" [maturity \"" + std::to_string(rm->m_maturity) + "\"]" \
36-
" [accuracy \"" + std::to_string(rm->m_accuracy) + "\"]";
26+
std::string RuleMessage::_details(const RuleMessage *rm) {
27+
std::string msg;
28+
29+
msg.append(" [file \"" + std::string(*rm->m_ruleFile.get()) + "\"]");
30+
msg.append(" [line \"" + std::to_string(rm->m_ruleLine) + "\"]");
31+
msg.append(" [id \"" + std::to_string(rm->m_ruleId) + "\"]");
32+
msg.append(" [rev \"" + rm->m_rev + "\"]");
33+
msg.append(" [msg \"" + rm->m_message + "\"]");
34+
msg.append(" [data \"" + utils::string::limitTo(200, rm->m_data) + "\"]");
35+
msg.append(" [severity \"" +
36+
std::to_string(rm->m_severity) + "\"]");
37+
msg.append(" [ver \"" + rm->m_ver + "\"]");
38+
msg.append(" [maturity \"" + std::to_string(rm->m_maturity) + "\"]");
39+
msg.append(" [accuracy \"" + std::to_string(rm->m_accuracy) + "\"]");
3740

3841
for (auto &a : rm->m_tags) {
39-
*msg += " [tag \"" + a + "\"]";
42+
msg.append(" [tag \"" + a + "\"]");
4043
}
4144

42-
*msg += " [hostname \"" + *rm->m_serverIpAddress.get() + "\"]" \
43-
" [uri \"" + *rm->m_uriNoQueryStringDecoded.get() + "\"]" \
44-
" [unique_id \"" + *rm->m_id.get() + "\"]" \
45-
" [ref \"" + utils::string::limitTo(200, rm->m_reference) + "\"]";
45+
msg.append(" [hostname \"" + *rm->m_serverIpAddress.get() \
46+
+ "\"]");
47+
msg.append(" [uri \"" + utils::string::limitTo(200, *rm->m_uriNoQueryStringDecoded.get()) + "\"]");
48+
msg.append(" [unique_id \"" + *rm->m_id + "\"]");
49+
msg.append(" [ref \"" + utils::string::limitTo(200, rm->m_reference) + "\"]");
50+
51+
return msg;
4652
}
4753

4854

49-
inline void RuleMessage::_errorLogTail(const RuleMessage *rm,
50-
std::string *msg) {
51-
*msg += " [hostname \"" + *rm->m_serverIpAddress.get() + "\"]" \
52-
" [uri \"" + utils::string::limitTo(200,
53-
*rm->m_uriNoQueryStringDecoded.get()) + "\"]" \
54-
" [unique_id \"" + *rm->m_id.get() + "\"]";
55+
std::string RuleMessage::_errorLogTail(const RuleMessage *rm) {
56+
std::string msg;
57+
58+
msg.append("[hostname \"" + *rm->m_serverIpAddress.get() + "\"]");
59+
msg.append(" [uri \"" + utils::string::limitTo(200, *rm->m_uriNoQueryStringDecoded.get()) + "\"]");
60+
msg.append(" [unique_id \"" + *rm->m_id + "\"]");
61+
62+
return msg;
5563
}
5664

5765

@@ -60,26 +68,27 @@ std::string RuleMessage::log(const RuleMessage *rm, int props, int code) {
6068
msg.reserve(2048);
6169

6270
if (props & ClientLogMessageInfo) {
63-
msg += "[client " + std::string(*rm->m_clientIpAddress.get()) + "] ";
71+
msg.append("[client " + std::string(*rm->m_clientIpAddress.get()) + "] ");
6472
}
6573

6674
if (rm->m_isDisruptive) {
67-
msg += "ModSecurity: Access denied with code ";
75+
msg.append("ModSecurity: Access denied with code ");
6876
if (code == -1) {
69-
msg += "%d";
77+
msg.append("%d");
7078
} else {
71-
msg += std::to_string(code);
79+
msg.append(std::to_string(code));
7280
}
73-
msg += " (phase " + std::to_string(rm->m_rule->m_phase - 1) + "). ";
81+
msg.append(" (phase ");
82+
msg.append(std::to_string(rm->m_rule->m_phase - 1) + "). ");
7483
} else {
75-
msg += "ModSecurity: Warning. ";
84+
msg.append("ModSecurity: Warning. ");
7685
}
7786

78-
msg += (rm->m_match);
79-
_details(rm, &msg);
87+
msg.append(rm->m_match);
88+
msg.append(_details(rm));
8089

8190
if (props & ErrorLogTailLogMessageInfo) {
82-
_errorLogTail(rm, &msg);
91+
msg.append(" " + _errorLogTail(rm));
8392
}
8493

8594
return modsecurity::utils::string::toHexIfNeeded(msg);

0 commit comments

Comments
 (0)