Skip to content

Commit 7d07aa6

Browse files
committed
Constify Transaction on variable resolution
1 parent 426ecf0 commit 7d07aa6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+206
-221
lines changed

headers/modsecurity/anchored_set_variable.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,21 +88,21 @@ class AnchoredSetVariable : public std::unordered_multimap<std::string,
8888
void set(const std::string &key, const bpstd::string_view &value,
8989
size_t offset);
9090

91-
void resolve(VariableValues *l);
91+
void resolve(VariableValues *l) const noexcept;
9292
void resolve(VariableValues *l,
93-
variables::KeyExclusions &ke);
93+
const variables::KeyExclusions &ke) const noexcept;
9494

9595
void resolve(const std::string &key,
96-
VariableValues *l);
96+
VariableValues *l) const noexcept;
9797

98-
void resolveRegularExpression(Utils::Regex *r,
99-
VariableValues *l);
98+
void resolveRegularExpression(const Utils::Regex *r,
99+
VariableValues *l) const noexcept;
100100

101-
void resolveRegularExpression(Utils::Regex *r,
101+
void resolveRegularExpression(const Utils::Regex *r,
102102
VariableValues *l,
103-
variables::KeyExclusions &ke);
103+
const variables::KeyExclusions &ke) const noexcept;
104104

105-
std::unique_ptr<std::string> resolveFirst(const std::string &key);
105+
std::unique_ptr<std::string> resolveFirst(const std::string &key) const noexcept;
106106

107107
Transaction *m_transaction;
108108
std::string m_name;

headers/modsecurity/anchored_variable.h

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,6 @@ class AnchoredVariable {
5151
AnchoredVariable(const AnchoredVariable &a) = delete;
5252
AnchoredVariable &operator= (const AnchoredVariable &a) = delete;
5353

54-
/*
55-
: m_transaction(a.m_transaction),
56-
m_offset(a.m_offset),
57-
m_name(a.m_name),
58-
m_value(a.m_value),
59-
m_var(a.m_var) { }
60-
*/
61-
6254
void unset();
6355
void set(const std::string &a, size_t offset);
6456
void set(const bpstd::string_view &a, size_t offset);
@@ -69,9 +61,9 @@ class AnchoredVariable {
6961
void append(const std::string &a, size_t offset,
7062
bool spaceSeparator, int size);
7163

72-
void evaluate(VariableValues *l);
73-
std::string * evaluate();
74-
std::unique_ptr<std::string> resolveFirst();
64+
void evaluate(VariableValues *l) const noexcept;
65+
const std::string *evaluate() const noexcept;
66+
std::unique_ptr<std::string> resolveFirst() const noexcept;
7567

7668
Transaction *m_transaction;
7769
int m_offset;
@@ -88,4 +80,3 @@ class AnchoredVariable {
8880

8981

9082
#endif // HEADERS_MODSECURITY_ANCHORED_VARIABLE_H_
91-

headers/modsecurity/collection/collection.h

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,16 @@ class Collection {
5757
virtual void del(const std::string& key) = 0;
5858

5959
virtual std::unique_ptr<std::string> resolveFirst(
60-
const std::string& var) = 0;
60+
const std::string& var) const = 0;
6161

6262
virtual void resolveSingleMatch(const std::string& var,
63-
VariableValues *l) = 0;
63+
VariableValues *l) const noexcept = 0;
6464
virtual void resolveMultiMatches(const std::string& var,
6565
VariableValues *l,
66-
variables::KeyExclusions &ke) = 0;
66+
const variables::KeyExclusions &ke) const noexcept = 0;
6767
virtual void resolveRegularExpression(const std::string& var,
6868
VariableValues *l,
69-
variables::KeyExclusions &ke) = 0;
69+
const variables::KeyExclusions &ke) const noexcept = 0;
7070

7171

7272
/* store */
@@ -131,65 +131,65 @@ class Collection {
131131

132132
/* resolveFirst */
133133
virtual std::unique_ptr<std::string> resolveFirst(const std::string& var,
134-
std::string compartment) {
134+
const std::string &compartment) const noexcept {
135135
std::string nkey = compartment + "::" + var;
136136
return resolveFirst(nkey);
137137
}
138138

139139

140140
virtual std::unique_ptr<std::string> resolveFirst(const std::string& var,
141-
std::string compartment, std::string compartment2) {
141+
const std::string &compartment, const std::string &compartment2) const noexcept {
142142
std::string nkey = compartment + "::" + compartment2 + "::" + var;
143143
return resolveFirst(nkey);
144144
}
145145

146146

147147
/* resolveSingleMatch */
148148
virtual void resolveSingleMatch(const std::string& var,
149-
std::string compartment, VariableValues *l) {
149+
const std::string &compartment, VariableValues *l) const noexcept {
150150
std::string nkey = compartment + "::" + var;
151151
resolveSingleMatch(nkey, l);
152152
}
153153

154154

155155
virtual void resolveSingleMatch(const std::string& var,
156-
std::string compartment, std::string compartment2,
157-
VariableValues *l) {
156+
const std::string &compartment, const std::string &compartment2,
157+
VariableValues *l) const noexcept {
158158
std::string nkey = compartment + "::" + compartment2 + "::" + var;
159159
resolveSingleMatch(nkey, l);
160160
}
161161

162162

163163
/* resolveMultiMatches */
164164
virtual void resolveMultiMatches(const std::string& var,
165-
std::string compartment, VariableValues *l,
166-
variables::KeyExclusions &ke) {
165+
const std::string &compartment, VariableValues *l,
166+
const variables::KeyExclusions &ke) const noexcept {
167167
std::string nkey = compartment + "::" + var;
168168
resolveMultiMatches(nkey, l, ke);
169169
}
170170

171171

172172
virtual void resolveMultiMatches(const std::string& var,
173-
std::string compartment, std::string compartment2,
173+
const std::string &compartment, const std::string &compartment2,
174174
VariableValues *l,
175-
variables::KeyExclusions &ke) {
175+
const variables::KeyExclusions &ke) const noexcept {
176176
std::string nkey = compartment + "::" + compartment2 + "::" + var;
177177
resolveMultiMatches(nkey, l, ke);
178178
}
179179

180180

181181
/* resolveRegularExpression */
182182
virtual void resolveRegularExpression(const std::string& var,
183-
std::string compartment, VariableValues *l,
184-
variables::KeyExclusions &ke) {
183+
const std::string &compartment, VariableValues *l,
184+
const variables::KeyExclusions &ke) const noexcept {
185185
std::string nkey = compartment + "::" + var;
186186
resolveRegularExpression(nkey, l, ke);
187187
}
188188

189189

190190
virtual void resolveRegularExpression(const std::string& var,
191-
std::string compartment, std::string compartment2,
192-
VariableValues *l, variables::KeyExclusions &ke) {
191+
const std::string &compartment, const std::string &compartment2,
192+
VariableValues *l, const variables::KeyExclusions &ke) const noexcept {
193193
std::string nkey = compartment + "::" + compartment2 + "::" + var;
194194
resolveRegularExpression(nkey, l, ke);
195195
}

src/Makefile.am

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@ libmodsecurity_la_CPPFLAGS = \
312312
-fPIC \
313313
-O3 \
314314
-I../headers \
315+
$(CURL_CFLAGS) \
315316
$(GEOIP_CFLAGS) \
316317
$(GLOBAL_CPPFLAGS) \
317318
$(MODSEC_NO_LOGS) \

src/actions/action_with_run_time_string.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class ActionWithRunTimeString : public virtual Action {
4949
}
5050
}
5151

52-
std::string getEvaluatedRunTimeString(Transaction *transaction) const noexcept {
52+
std::string getEvaluatedRunTimeString(const Transaction *transaction) const noexcept {
5353
return (m_string == nullptr)?"":m_string->evaluate(transaction);
5454
}
5555

src/anchored_set_variable.cc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ void AnchoredSetVariable::set(const std::string &key,
7171

7272

7373
void AnchoredSetVariable::resolve(
74-
VariableValues *l) {
74+
VariableValues *l) const noexcept {
7575
for (const auto& x : *this) {
7676
l->insert(l->begin(), x.second);
7777
}
@@ -80,7 +80,7 @@ void AnchoredSetVariable::resolve(
8080

8181
void AnchoredSetVariable::resolve(
8282
VariableValues *l,
83-
variables::KeyExclusions &ke) {
83+
const variables::KeyExclusions &ke) const noexcept {
8484
for (const auto& x : *this) {
8585
if (!ke.toOmit(x.first)) {
8686
l->insert(l->begin(), x.second);
@@ -93,7 +93,7 @@ void AnchoredSetVariable::resolve(
9393

9494

9595
void AnchoredSetVariable::resolve(const std::string &key,
96-
VariableValues *l) {
96+
VariableValues *l) const noexcept {
9797
auto range = this->equal_range(key);
9898
for (auto it = range.first; it != range.second; ++it) {
9999
l->push_back(it->second);
@@ -102,7 +102,7 @@ void AnchoredSetVariable::resolve(const std::string &key,
102102

103103

104104
std::unique_ptr<std::string> AnchoredSetVariable::resolveFirst(
105-
const std::string &key) {
105+
const std::string &key) const noexcept {
106106
auto range = equal_range(key);
107107
for (auto it = range.first; it != range.second; ++it) {
108108
std::unique_ptr<std::string> b(new std::string());
@@ -113,8 +113,8 @@ std::unique_ptr<std::string> AnchoredSetVariable::resolveFirst(
113113
}
114114

115115

116-
void AnchoredSetVariable::resolveRegularExpression(Utils::Regex *r,
117-
VariableValues *l) {
116+
void AnchoredSetVariable::resolveRegularExpression(const Utils::Regex *r,
117+
VariableValues *l) const noexcept {
118118
for (const auto& x : *this) {
119119
int ret = Utils::regex_search(x.first, *r);
120120
if (ret <= 0) {
@@ -125,9 +125,9 @@ void AnchoredSetVariable::resolveRegularExpression(Utils::Regex *r,
125125
}
126126

127127

128-
void AnchoredSetVariable::resolveRegularExpression(Utils::Regex *r,
128+
void AnchoredSetVariable::resolveRegularExpression(const Utils::Regex *r,
129129
VariableValues *l,
130-
variables::KeyExclusions &ke) {
130+
const variables::KeyExclusions &ke) const noexcept {
131131
for (const auto& x : *this) {
132132
int ret = Utils::regex_search(x.first, *r);
133133
if (ret <= 0) {

src/anchored_variable.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ void AnchoredVariable::append(const std::string &a, size_t offset,
117117
}
118118

119119

120-
void AnchoredVariable::evaluate(VariableValues *l) {
120+
void AnchoredVariable::evaluate(VariableValues *l) const noexcept {
121121
if (m_name.empty()) {
122122
return;
123123
}
@@ -127,12 +127,12 @@ void AnchoredVariable::evaluate(VariableValues *l) {
127127
}
128128

129129

130-
std::string * AnchoredVariable::evaluate() {
130+
const std::string *AnchoredVariable::evaluate() const noexcept {
131131
return &m_value;
132132
}
133133

134134

135-
std::unique_ptr<std::string> AnchoredVariable::resolveFirst() {
135+
std::unique_ptr<std::string> AnchoredVariable::resolveFirst() const noexcept {
136136
if (m_value.empty()) {
137137
return nullptr;
138138
}

src/collection/backend/in_memory-per_process.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ void InMemoryPerProcess::del(const std::string& key) {
8686

8787

8888
void InMemoryPerProcess::resolveSingleMatch(const std::string& var,
89-
VariableValues *l) {
89+
VariableValues *l) const noexcept {
9090
auto range = this->equal_range(var);
9191

9292
for (auto it = range.first; it != range.second; ++it) {
@@ -96,7 +96,7 @@ void InMemoryPerProcess::resolveSingleMatch(const std::string& var,
9696

9797

9898
void InMemoryPerProcess::resolveMultiMatches(const std::string& var,
99-
VariableValues *l, variables::KeyExclusions &ke) {
99+
VariableValues *l, const variables::KeyExclusions &ke) const noexcept {
100100
size_t keySize = var.size();
101101
l->reserve(15);
102102

@@ -121,7 +121,7 @@ void InMemoryPerProcess::resolveMultiMatches(const std::string& var,
121121

122122

123123
void InMemoryPerProcess::resolveRegularExpression(const std::string& var,
124-
VariableValues *l, variables::KeyExclusions &ke) {
124+
VariableValues *l, const variables::KeyExclusions &ke) const noexcept {
125125

126126
//if (var.find(":") == std::string::npos) {
127127
// return;
@@ -160,7 +160,7 @@ void InMemoryPerProcess::resolveRegularExpression(const std::string& var,
160160

161161

162162
std::unique_ptr<std::string> InMemoryPerProcess::resolveFirst(
163-
const std::string& var) {
163+
const std::string& var) const noexcept {
164164
auto range = equal_range(var);
165165
for (auto it = range.first; it != range.second; ++it) {
166166
return std::unique_ptr<std::string>(new std::string(it->second));

src/collection/backend/in_memory-per_process.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,16 +84,16 @@ class InMemoryPerProcess :
8484

8585
void del(const std::string& key) override;
8686

87-
std::unique_ptr<std::string> resolveFirst(const std::string& var) override;
87+
std::unique_ptr<std::string> resolveFirst(const std::string& var) const noexcept override;
8888

8989
void resolveSingleMatch(const std::string& var,
90-
VariableValues *l) override;
90+
VariableValues *l) const noexcept override;
9191
void resolveMultiMatches(const std::string& var,
9292
VariableValues *l,
93-
variables::KeyExclusions &ke) override;
93+
const variables::KeyExclusions &ke) const noexcept override;
9494
void resolveRegularExpression(const std::string& var,
9595
VariableValues *l,
96-
variables::KeyExclusions &ke) override;
96+
const variables::KeyExclusions &ke) const noexcept override;
9797

9898
private:
9999
pthread_mutex_t m_lock;

src/collection/backend/lmdb.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class LMDB :
6666
std::unique_ptr<std::string> resolveFirst(const std::string& var) override;
6767

6868
void resolveSingleMatch(const std::string& var,
69-
VariableValues *l) override;
69+
VariableValues *l) const override;
7070
void resolveMultiMatches(const std::string& var,
7171
VariableValues *l,
7272
variables::KeyExclusions &ke) override;

src/rule_with_actions.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,8 +395,8 @@ bool RuleWithActions::containsMsg(const std::string& name, Transaction *t) const
395395
}
396396

397397

398-
std::string RuleWithActions::getLogData(Transaction *t) const { return m_logData->getEvaluatedRunTimeString(t); }
399-
std::string RuleWithActions::getMessage(Transaction *t) const { return m_msg->getEvaluatedRunTimeString(t); }
398+
std::string RuleWithActions::getLogData(const Transaction *t) const { return m_logData->getEvaluatedRunTimeString(t); }
399+
std::string RuleWithActions::getMessage(const Transaction *t) const { return m_msg->getEvaluatedRunTimeString(t); }
400400

401401

402402
} // namespace modsecurity

src/rule_with_actions.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -420,13 +420,13 @@ class RuleWithActions : public Rule {
420420

421421
inline bool hasLogDataAction() const { return m_logData != nullptr || m_defaultActionLogData != nullptr; }
422422
inline std::shared_ptr<actions::LogData> getLogDataAction() const { return m_logData; }
423-
std::string getLogData(/*const */Transaction *t) const;
423+
std::string getLogData(const Transaction *t) const;
424424
inline void setLogDataAction(const std::shared_ptr<actions::LogData> &data) { m_logData = data; }
425425

426426
inline bool hasMessageAction() const { return m_msg != nullptr || m_defaultActionMsg != nullptr; }
427427
inline std::shared_ptr<actions::Msg> getMessageAction() const { return m_msg; }
428428
inline void setMessageAction(const std::shared_ptr<actions::Msg> &msg) { m_msg = msg; }
429-
std::string getMessage(/*const */Transaction *t) const;
429+
std::string getMessage(const Transaction *t) const;
430430

431431

432432
inline bool hasSeverityAction() const { return m_severity != SEVERITY_NOT_SET || m_defaultSeverity != SEVERITY_NOT_SET; }

src/run_time_string.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void RunTimeString::append(std::unique_ptr<Variable> var) {
4242
}
4343

4444

45-
std::string RunTimeString::evaluate(/* const */ Transaction *transaction) const noexcept {
45+
std::string RunTimeString::evaluate(const Transaction *transaction) const noexcept {
4646
std::string retString;
4747
// FIXME: Educated guess the size of retString based on the size of the elements.
4848
for (auto &element : m_elements) {

src/run_time_string.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,7 @@ class RunTimeString {
6767
void append(std::unique_ptr<Variable> var);
6868

6969

70-
/*
71-
*
72-
* FIXME: Transaction should be const here. Variables resolution does
73-
* not change anything on transaction instance.
74-
*
75-
*/
76-
std::string evaluate(/* const */ Transaction *t = nullptr) const noexcept;
70+
std::string evaluate(const Transaction *t = nullptr) const noexcept;
7771

7872

7973
inline bool containsMacro() const noexcept {
@@ -122,7 +116,7 @@ class RunTimeString {
122116
};
123117

124118

125-
void appendValueTo(/* const */ Transaction *transaction, std::string &v) const noexcept {
119+
void appendValueTo(const Transaction *transaction, std::string &v) const noexcept {
126120
if (m_variable && transaction) {
127121
VariableValues l;
128122
m_variable->evaluate(transaction, &l);

src/variables/duration.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
namespace modsecurity {
2828
namespace variables {
2929

30-
void Duration::evaluate(Transaction *transaction,
31-
VariableValues *l) {
30+
void Duration::evaluate(const Transaction *transaction,
31+
VariableValues *l) const noexcept {
3232
double e = utils::cpu_seconds() - transaction->m_creationTimeStamp;
3333

3434
l->push_back(std::make_shared<VariableValue>(

0 commit comments

Comments
 (0)