Skip to content

Commit 55d3483

Browse files
committed
Simplify and reduce code duplication in Transaction constructors
- Leverage delegating constructor to avoid code duplication between the two available Transaction constructors. - The constructor without 'id' argument delegates to the one that receives it by providing `nullptr` as a value, which is used to flag that an id needs to be generated. - Simplified constructor by removing member initialization where the default constructor will be invoked.
1 parent c2a879e commit 55d3483

File tree

2 files changed

+14
-112
lines changed

2 files changed

+14
-112
lines changed

headers/modsecurity/transaction.h

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

16+
#ifndef HEADERS_MODSECURITY_TRANSACTION_H_
17+
#define HEADERS_MODSECURITY_TRANSACTION_H_
18+
1619
#ifdef __cplusplus
1720
#include <cassert>
1821
#include <ctime>
@@ -33,9 +36,6 @@
3336
#include <stdlib.h>
3437
#include <stddef.h>
3538

36-
#ifndef HEADERS_MODSECURITY_TRANSACTION_H_
37-
#define HEADERS_MODSECURITY_TRANSACTION_H_
38-
3939
#ifndef __cplusplus
4040
typedef struct ModSecurity_t ModSecurity;
4141
typedef struct Transaction_t Transaction;

src/transaction.cc

+11-109
Original file line numberDiff line numberDiff line change
@@ -102,90 +102,12 @@ namespace modsecurity {
102102
* @endcode
103103
*
104104
*/
105-
Transaction::Transaction(ModSecurity *ms, RulesSet *rules, void *logCbData)
106-
: m_creationTimeStamp(utils::cpu_seconds()),
107-
m_clientIpAddress(""),
108-
m_httpVersion(""),
109-
m_serverIpAddress(""),
110-
m_requestHostName(""),
111-
m_uri(""),
112-
m_uri_no_query_string_decoded(""),
113-
m_ARGScombinedSizeDouble(0),
114-
m_clientPort(0),
115-
m_highestSeverityAction(255),
116-
m_httpCodeReturned(200),
117-
m_serverPort(0),
118-
m_ms(ms),
119-
m_requestBodyType(UnknownFormat),
120-
m_requestBodyProcessor(UnknownFormat),
121-
m_rules(rules),
122-
m_ruleRemoveById(),
123-
m_ruleRemoveByIdRange(),
124-
m_ruleRemoveByTag(),
125-
m_ruleRemoveTargetByTag(),
126-
m_ruleRemoveTargetById(),
127-
m_requestBodyAccess(RulesSet::PropertyNotSetConfigBoolean),
128-
m_auditLogModifier(),
129-
m_ctlAuditEngine(AuditLog::AuditLogStatus::NotSetLogStatus),
130-
m_rulesMessages(),
131-
m_requestBody(),
132-
m_responseBody(),
133-
/* m_id(), */
134-
m_skip_next(0),
135-
m_allowType(modsecurity::actions::disruptive::NoneAllowType),
136-
m_uri_decoded(""),
137-
m_actions(),
138-
m_it(),
139-
m_timeStamp(std::time(NULL)),
140-
m_collections(ms->m_global_collection, ms->m_ip_collection,
141-
ms->m_session_collection, ms->m_user_collection,
142-
ms->m_resource_collection),
143-
m_matched(),
144-
#ifdef WITH_LIBXML2
145-
m_xml(new RequestBodyProcessor::XML(this)),
146-
#else
147-
m_xml(NULL),
148-
#endif
149-
#ifdef WITH_YAJL
150-
m_json(new RequestBodyProcessor::JSON(this)),
151-
#else
152-
m_json(NULL),
153-
#endif
154-
m_secRuleEngine(RulesSetProperties::PropertyNotSetRuleEngine),
155-
m_variableDuration(""),
156-
m_variableEnvs(),
157-
m_variableHighestSeverityAction(""),
158-
m_variableRemoteUser(""),
159-
m_variableTime(""),
160-
m_variableTimeDay(""),
161-
m_variableTimeEpoch(""),
162-
m_variableTimeHour(""),
163-
m_variableTimeMin(""),
164-
m_variableTimeSec(""),
165-
m_variableTimeWDay(""),
166-
m_variableTimeYear(""),
167-
m_logCbData(logCbData),
168-
TransactionAnchoredVariables(this) {
169-
m_id = std::to_string(m_timeStamp) +
170-
std::to_string(modsecurity::utils::generate_transaction_unique_id());
171-
172-
m_variableUrlEncodedError.set("0", 0);
173-
m_variableMscPcreError.set("0", 0);
174-
m_variableMscPcreLimitsExceeded.set("0", 0);
175-
176-
ms_dbg(4, "Initializing transaction");
177105

178-
intervention::clean(&m_it);
179-
}
106+
Transaction::Transaction(ModSecurity *ms, RulesSet *rules, void *logCbData)
107+
: Transaction(ms, rules, nullptr, logCbData) { }
180108

181109
Transaction::Transaction(ModSecurity *ms, RulesSet *rules, char *id, void *logCbData)
182110
: m_creationTimeStamp(utils::cpu_seconds()),
183-
m_clientIpAddress(""),
184-
m_httpVersion(""),
185-
m_serverIpAddress(""),
186-
m_requestHostName(""),
187-
m_uri(""),
188-
m_uri_no_query_string_decoded(""),
189111
m_ARGScombinedSizeDouble(0),
190112
m_clientPort(0),
191113
m_highestSeverityAction(255),
@@ -195,53 +117,33 @@ Transaction::Transaction(ModSecurity *ms, RulesSet *rules, char *id, void *logCb
195117
m_requestBodyType(UnknownFormat),
196118
m_requestBodyProcessor(UnknownFormat),
197119
m_rules(rules),
198-
m_ruleRemoveById(),
199-
m_ruleRemoveByIdRange(),
200-
m_ruleRemoveByTag(),
201-
m_ruleRemoveTargetByTag(),
202-
m_ruleRemoveTargetById(),
203120
m_requestBodyAccess(RulesSet::PropertyNotSetConfigBoolean),
204-
m_auditLogModifier(),
205121
m_ctlAuditEngine(AuditLog::AuditLogStatus::NotSetLogStatus),
206-
m_rulesMessages(),
207-
m_requestBody(),
208-
m_responseBody(),
209-
m_id(id),
210122
m_skip_next(0),
211123
m_allowType(modsecurity::actions::disruptive::NoneAllowType),
212-
m_uri_decoded(""),
213-
m_actions(),
214-
m_it(),
215-
m_timeStamp(std::time(NULL)),
124+
m_timeStamp(std::time(nullptr)),
216125
m_collections(ms->m_global_collection, ms->m_ip_collection,
217126
ms->m_session_collection, ms->m_user_collection,
218127
ms->m_resource_collection),
219-
m_matched(),
220128
#ifdef WITH_LIBXML2
221129
m_xml(new RequestBodyProcessor::XML(this)),
222130
#else
223-
m_xml(NULL),
131+
m_xml(nullptr),
224132
#endif
225133
#ifdef WITH_YAJL
226134
m_json(new RequestBodyProcessor::JSON(this)),
227135
#else
228-
m_json(NULL),
136+
m_json(nullptr),
229137
#endif
230138
m_secRuleEngine(RulesSetProperties::PropertyNotSetRuleEngine),
231-
m_variableDuration(""),
232-
m_variableEnvs(),
233-
m_variableHighestSeverityAction(""),
234-
m_variableRemoteUser(""),
235-
m_variableTime(""),
236-
m_variableTimeDay(""),
237-
m_variableTimeEpoch(""),
238-
m_variableTimeHour(""),
239-
m_variableTimeMin(""),
240-
m_variableTimeSec(""),
241-
m_variableTimeWDay(""),
242-
m_variableTimeYear(""),
243139
m_logCbData(logCbData),
244140
TransactionAnchoredVariables(this) {
141+
if (id == nullptr) {
142+
m_id = std::to_string(m_timeStamp) +
143+
std::to_string(modsecurity::utils::generate_transaction_unique_id());
144+
} else {
145+
m_id = id;
146+
}
245147

246148
m_variableUrlEncodedError.set("0", 0);
247149
m_variableMscPcreError.set("0", 0);

0 commit comments

Comments
 (0)