Skip to content

Commit 9e02b3c

Browse files
authored
Merge pull request #3248 from eduar-hte/simplified-constructors
Simplified constructors, copy constructors & assignment operators
2 parents 580fe19 + 6ecfee7 commit 9e02b3c

23 files changed

+172
-492
lines changed

examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ class ReadingLogsViaRuleMessage {
155155
const modsecurity::RuleMessage *ruleMessage = \
156156
reinterpret_cast<const modsecurity::RuleMessage *>(ruleMessagev);
157157

158-
std::cout << "Rule Id: " << std::to_string(ruleMessage->m_ruleId);
159-
std::cout << " phase: " << std::to_string(ruleMessage->m_phase);
158+
std::cout << "Rule Id: " << std::to_string(ruleMessage->m_rule.m_ruleId);
159+
std::cout << " phase: " << std::to_string(ruleMessage->getPhase());
160160
std::cout << std::endl;
161161
if (ruleMessage->m_isDisruptive) {
162162
std::cout << " * Disruptive action: ";

examples/using_bodies_in_chunks/simple_request.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ static void logCb(void *data, const void *ruleMessagev) {
7676
const modsecurity::RuleMessage *ruleMessage = \
7777
reinterpret_cast<const modsecurity::RuleMessage *>(ruleMessagev);
7878

79-
std::cout << "Rule Id: " << std::to_string(ruleMessage->m_ruleId);
80-
std::cout << " phase: " << std::to_string(ruleMessage->m_phase);
79+
std::cout << "Rule Id: " << std::to_string(ruleMessage->m_rule.m_ruleId);
80+
std::cout << " phase: " << std::to_string(ruleMessage->getPhase());
8181
std::cout << std::endl;
8282
if (ruleMessage->m_isDisruptive) {
8383
std::cout << " * Disruptive action: ";

headers/modsecurity/actions/action.h

+3-15
Original file line numberDiff line numberDiff line change
@@ -81,21 +81,9 @@ class Action {
8181
set_name_and_payload(_action);
8282
}
8383

84-
Action(const Action &a)
85-
: m_isNone(a.m_isNone),
86-
temporaryAction(a.temporaryAction),
87-
action_kind(a.action_kind),
88-
m_name(a.m_name),
89-
m_parser_payload(a.m_parser_payload) { }
90-
91-
Action &operator=(const Action& a) {
92-
m_isNone = a.m_isNone;
93-
temporaryAction = a.temporaryAction;
94-
action_kind = a.action_kind;
95-
m_name = a.m_name;
96-
m_parser_payload = a.m_parser_payload;
97-
return *this;
98-
}
84+
Action(const Action &a) = delete;
85+
86+
Action &operator=(const Action& a) = delete;
9987

10088
virtual ~Action() { }
10189

headers/modsecurity/rule.h

+15-30
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,6 @@
1313
*
1414
*/
1515

16-
#ifdef __cplusplus
17-
#include <stack>
18-
#include <vector>
19-
#include <string>
20-
#include <list>
21-
#include <memory>
22-
#include <utility>
23-
#endif
24-
2516
#ifndef HEADERS_MODSECURITY_RULE_H_
2617
#define HEADERS_MODSECURITY_RULE_H_
2718

@@ -31,6 +22,12 @@
3122

3223
#ifdef __cplusplus
3324

25+
#include <vector>
26+
#include <string>
27+
#include <list>
28+
#include <memory>
29+
#include <utility>
30+
3431
namespace modsecurity {
3532
namespace variables {
3633
class Variable;
@@ -67,24 +64,15 @@ using MatchActions = std::vector<actions::Action *>;
6764

6865
class Rule {
6966
public:
70-
Rule(std::unique_ptr<std::string> fileName, int lineNumber)
71-
: m_fileName(std::make_shared<std::string>(*fileName)),
67+
Rule(const std::string &fileName, int lineNumber)
68+
: m_fileName(fileName),
7269
m_lineNumber(lineNumber),
7370
m_phase(modsecurity::Phases::RequestHeadersPhase) {
7471
}
7572

76-
Rule(const Rule &other) :
77-
m_fileName(other.m_fileName),
78-
m_lineNumber(other.m_lineNumber),
79-
m_phase(other.m_phase)
80-
{ }
81-
82-
Rule &operator=(const Rule& other) {
83-
m_fileName = other.m_fileName;
84-
m_lineNumber = other.m_lineNumber;
85-
m_phase = other.m_phase;
86-
return *this;
87-
}
73+
Rule(const Rule &other) = delete;
74+
75+
Rule &operator=(const Rule &other) = delete;
8876

8977
virtual ~Rule() {}
9078

@@ -93,7 +81,7 @@ class Rule {
9381
virtual bool evaluate(Transaction *transaction,
9482
std::shared_ptr<RuleMessage> rm) = 0;
9583

96-
std::shared_ptr<std::string> getFileName() const {
84+
const std::string& getFileName() const {
9785
return m_fileName;
9886
}
9987

@@ -105,18 +93,15 @@ class Rule {
10593
void setPhase(int phase) { m_phase = phase; }
10694

10795
virtual std::string getReference() {
108-
if (m_fileName) {
109-
return *m_fileName + ":" + std::to_string(m_lineNumber);
110-
}
111-
return "<<no file>>:" + std::to_string(m_lineNumber);
96+
return m_fileName + ":" + std::to_string(m_lineNumber);
11297
}
11398

11499

115100
virtual bool isMarker() { return false; }
116101

117102
private:
118-
std::shared_ptr<std::string> m_fileName;
119-
int m_lineNumber;
103+
const std::string m_fileName;
104+
const int m_lineNumber;
120105
// FIXME: phase may not be neede to SecMarker.
121106
int m_phase;
122107
};

headers/modsecurity/rule_marker.h

+13-32
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,6 @@
1313
*
1414
*/
1515

16-
#ifdef __cplusplus
17-
#include <stack>
18-
#include <vector>
19-
#include <string>
20-
#include <list>
21-
#include <memory>
22-
#include <utility>
23-
#endif
24-
2516
#ifndef HEADERS_MODSECURITY_RULE_MARKER_H_
2617
#define HEADERS_MODSECURITY_RULE_MARKER_H_
2718

@@ -32,55 +23,45 @@
3223

3324
#ifdef __cplusplus
3425

26+
#include <string>
27+
#include <memory>
28+
3529
namespace modsecurity {
3630

3731

3832
class RuleMarker : public Rule {
3933
public:
4034
RuleMarker(
4135
const std::string &name,
42-
std::unique_ptr<std::string> fileName,
36+
const std::string &fileName,
4337
int lineNumber)
44-
: Rule(std::move(fileName), lineNumber),
45-
m_name(std::make_shared<std::string>(name)) { }
46-
47-
RuleMarker(const RuleMarker& r) :
48-
Rule(r),
49-
m_name(r.m_name)
50-
{ }
51-
52-
RuleMarker &operator =(const RuleMarker& r) {
53-
Rule::operator = (r);
54-
m_name = r.m_name;
55-
return *this;
56-
}
38+
: Rule(fileName, lineNumber),
39+
m_name(name) { }
40+
41+
RuleMarker(const RuleMarker &r) = delete;
5742

43+
RuleMarker &operator=(const RuleMarker &r) = delete;
44+
5845
virtual bool evaluate(Transaction *transaction,
5946
std::shared_ptr<RuleMessage> rm) override {
6047
return evaluate(transaction);
6148
}
6249

6350
virtual bool evaluate(Transaction *transaction) override {
64-
if (transaction->isInsideAMarker()) {
65-
if (*transaction->getCurrentMarker() == *m_name) {
51+
if (transaction->isInsideAMarker() &&
52+
*transaction->getCurrentMarker() == m_name) {
6653
transaction->removeMarker();
6754
// FIXME: Move this to .cc
6855
// ms_dbg_a(transaction, 4, "Out of a SecMarker " + *m_name);
69-
}
7056
}
7157

7258
return true;
7359
};
7460

75-
76-
std::shared_ptr<std::string> getName() {
77-
return m_name;
78-
}
79-
8061
bool isMarker() override { return true; }
8162

8263
private:
83-
std::shared_ptr<std::string> m_name;
64+
const std::string m_name;
8465
};
8566

8667

headers/modsecurity/rule_message.h

+12-126
Original file line numberDiff line numberDiff line change
@@ -42,124 +42,20 @@ class RuleMessage {
4242
ClientLogMessageInfo = 4
4343
};
4444

45-
/**
46-
*
47-
* FIXME: RuleMessage is currently too big, doing a lot of
48-
* unnecessary data duplication. Needs to be shrink down.
49-
*
50-
*/
51-
RuleMessage(RuleWithActions *rule, Transaction *trans) :
52-
m_accuracy(rule->m_accuracy),
53-
m_clientIpAddress(trans->m_clientIpAddress),
54-
m_data(""),
55-
m_id(trans->m_id),
56-
m_isDisruptive(false),
57-
m_match(""),
58-
m_maturity(rule->m_maturity),
59-
m_message(""),
60-
m_noAuditLog(false),
61-
m_phase(rule->getPhase() - 1),
62-
m_reference(""),
63-
m_rev(rule->m_rev),
45+
RuleMessage(const RuleWithActions &rule, const Transaction &trans) :
6446
m_rule(rule),
65-
m_ruleFile(rule->getFileName()),
66-
m_ruleId(rule->m_ruleId),
67-
m_ruleLine(rule->getLineNumber()),
68-
m_saveMessage(true),
69-
m_serverIpAddress(trans->m_serverIpAddress),
70-
m_requestHostName(trans->m_requestHostName),
71-
m_severity(0),
72-
m_uriNoQueryStringDecoded(trans->m_uri_no_query_string_decoded),
73-
m_ver(rule->m_ver),
74-
m_tags()
47+
m_transaction(trans)
7548
{ }
7649

77-
explicit RuleMessage(RuleMessage *rule) :
78-
m_accuracy(rule->m_accuracy),
79-
m_clientIpAddress(rule->m_clientIpAddress),
80-
m_data(rule->m_data),
81-
m_id(rule->m_id),
82-
m_isDisruptive(rule->m_isDisruptive),
83-
m_match(rule->m_match),
84-
m_maturity(rule->m_maturity),
85-
m_message(rule->m_message),
86-
m_noAuditLog(rule->m_noAuditLog),
87-
m_phase(rule->m_phase),
88-
m_reference(rule->m_reference),
89-
m_rev(rule->m_rev),
90-
m_rule(rule->m_rule),
91-
m_ruleFile(rule->m_ruleFile),
92-
m_ruleId(rule->m_ruleId),
93-
m_ruleLine(rule->m_ruleLine),
94-
m_saveMessage(rule->m_saveMessage),
95-
m_serverIpAddress(rule->m_serverIpAddress),
96-
m_requestHostName(rule->m_requestHostName),
97-
m_severity(rule->m_severity),
98-
m_uriNoQueryStringDecoded(rule->m_uriNoQueryStringDecoded),
99-
m_ver(rule->m_ver),
100-
m_tags(rule->m_tags)
101-
{ }
102-
103-
RuleMessage(const RuleMessage& ruleMessage)
104-
: m_accuracy(ruleMessage.m_accuracy),
105-
m_clientIpAddress(ruleMessage.m_clientIpAddress),
106-
m_data(ruleMessage.m_data),
107-
m_id(ruleMessage.m_id),
108-
m_isDisruptive(ruleMessage.m_isDisruptive),
109-
m_match(ruleMessage.m_match),
110-
m_maturity(ruleMessage.m_maturity),
111-
m_message(ruleMessage.m_message),
112-
m_noAuditLog(ruleMessage.m_noAuditLog),
113-
m_phase(ruleMessage.m_phase),
114-
m_reference(ruleMessage.m_reference),
115-
m_rev(ruleMessage.m_rev),
116-
m_rule(ruleMessage.m_rule),
117-
m_ruleFile(ruleMessage.m_ruleFile),
118-
m_ruleId(ruleMessage.m_ruleId),
119-
m_ruleLine(ruleMessage.m_ruleLine),
120-
m_saveMessage(ruleMessage.m_saveMessage),
121-
m_serverIpAddress(ruleMessage.m_serverIpAddress),
122-
m_requestHostName(ruleMessage.m_requestHostName),
123-
m_severity(ruleMessage.m_severity),
124-
m_uriNoQueryStringDecoded(ruleMessage.m_uriNoQueryStringDecoded),
125-
m_ver(ruleMessage.m_ver),
126-
m_tags(ruleMessage.m_tags)
127-
{ }
128-
129-
RuleMessage &operator=(const RuleMessage& ruleMessage) {
130-
m_accuracy = ruleMessage.m_accuracy;
131-
m_clientIpAddress = ruleMessage.m_clientIpAddress;
132-
m_data = ruleMessage.m_data;
133-
m_id = ruleMessage.m_id;
134-
m_isDisruptive = ruleMessage.m_isDisruptive;
135-
m_match = ruleMessage.m_match;
136-
m_maturity = ruleMessage.m_maturity;
137-
m_message = ruleMessage.m_message;
138-
m_noAuditLog = ruleMessage.m_noAuditLog;
139-
m_phase = ruleMessage.m_phase;
140-
m_reference = ruleMessage.m_reference;
141-
m_rev = ruleMessage.m_rev;
142-
m_rule = ruleMessage.m_rule;
143-
m_ruleFile = ruleMessage.m_ruleFile;
144-
m_ruleId = ruleMessage.m_ruleId;
145-
m_ruleLine = ruleMessage.m_ruleLine;
146-
m_saveMessage = ruleMessage.m_saveMessage;
147-
m_serverIpAddress = ruleMessage.m_serverIpAddress;
148-
m_requestHostName = ruleMessage.m_requestHostName;
149-
m_severity = ruleMessage.m_severity;
150-
m_uriNoQueryStringDecoded = ruleMessage.m_uriNoQueryStringDecoded;
151-
m_ver = ruleMessage.m_ver;
152-
m_tags = ruleMessage.m_tags;
153-
return *this;
154-
}
50+
RuleMessage(const RuleMessage &ruleMessage) = default;
51+
RuleMessage &operator=(const RuleMessage &ruleMessage) = delete;
15552

15653
void clean() {
15754
m_data = "";
15855
m_match = "";
15956
m_isDisruptive = false;
16057
m_reference = "";
16158
m_severity = 0;
162-
m_ver = "";
16359
}
16460

16561
std::string log() {
@@ -187,28 +83,18 @@ class RuleMessage {
18783
static std::string _details(const RuleMessage *rm);
18884
static std::string _errorLogTail(const RuleMessage *rm);
18985

190-
int m_accuracy;
191-
std::shared_ptr<std::string> m_clientIpAddress;
86+
int getPhase() const { return m_rule.getPhase() - 1; }
87+
88+
const RuleWithActions &m_rule;
89+
const Transaction &m_transaction;
19290
std::string m_data;
193-
std::shared_ptr<std::string> m_id;
194-
bool m_isDisruptive;
91+
bool m_isDisruptive = false;
19592
std::string m_match;
196-
int m_maturity;
19793
std::string m_message;
198-
bool m_noAuditLog;
199-
int m_phase;
94+
bool m_noAuditLog = false;
20095
std::string m_reference;
201-
std::string m_rev;
202-
RuleWithActions *m_rule;
203-
std::shared_ptr<std::string> m_ruleFile;
204-
int m_ruleId;
205-
int m_ruleLine;
206-
bool m_saveMessage;
207-
std::shared_ptr<std::string> m_serverIpAddress;
208-
std::shared_ptr<std::string> m_requestHostName;
209-
int m_severity;
210-
std::shared_ptr<std::string> m_uriNoQueryStringDecoded;
211-
std::string m_ver;
96+
bool m_saveMessage = true;
97+
int m_severity = 0;
21298

21399
std::list<std::string> m_tags;
214100
};

0 commit comments

Comments
 (0)