mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-08-13 21:36:00 +03:00
Having default actions as o shared pointer
This commit is contained in:
parent
9d158611cf
commit
6b0ad8049a
@ -204,13 +204,10 @@ class RulesSetProperties {
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
for (i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) {
|
for (i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) {
|
||||||
std::vector<actions::Action *> *tmp = &m_defaultActions[i];
|
std::vector<std::shared_ptr<actions::Action> > *tmp = \
|
||||||
|
&m_defaultActions[i];
|
||||||
while (tmp->empty() == false) {
|
while (tmp->empty() == false) {
|
||||||
actions::Action *a = tmp->back();
|
|
||||||
tmp->pop_back();
|
tmp->pop_back();
|
||||||
if (a->refCountDecreaseAndCheck()) {
|
|
||||||
a = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -342,8 +339,8 @@ class RulesSetProperties {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int mergeProperties(RulesSetProperties *from, RulesSetProperties *to,
|
static int mergeProperties(RulesSetProperties *from,
|
||||||
std::ostringstream *err) {
|
RulesSetProperties *to, std::ostringstream *err) {
|
||||||
|
|
||||||
merge_ruleengine_value(to->m_secRuleEngine, from->m_secRuleEngine,
|
merge_ruleengine_value(to->m_secRuleEngine, from->m_secRuleEngine,
|
||||||
PropertyNotSetRuleEngine);
|
PropertyNotSetRuleEngine);
|
||||||
@ -414,13 +411,12 @@ class RulesSetProperties {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) {
|
for (int i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) {
|
||||||
std::vector<actions::Action *> *actions_from = \
|
std::vector<std::shared_ptr<actions::Action> > *actions_from = \
|
||||||
from->m_defaultActions+i;
|
&from->m_defaultActions[i];
|
||||||
std::vector<actions::Action *> *actions_to = to->m_defaultActions+i;
|
std::vector<std::shared_ptr<actions::Action> > *actions_to = \
|
||||||
|
&to->m_defaultActions[i];
|
||||||
for (size_t j = 0; j < actions_from->size(); j++) {
|
for (size_t j = 0; j < actions_from->size(); j++) {
|
||||||
actions::Action *action = actions_from->at(j);
|
actions_to->push_back(actions_from->at(j));
|
||||||
action->refCountIncrease();
|
|
||||||
actions_to->push_back(action);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -485,7 +481,8 @@ class RulesSetProperties {
|
|||||||
ConfigString m_uploadTmpDirectory;
|
ConfigString m_uploadTmpDirectory;
|
||||||
ConfigString m_secArgumentSeparator;
|
ConfigString m_secArgumentSeparator;
|
||||||
ConfigString m_secWebAppId;
|
ConfigString m_secWebAppId;
|
||||||
std::vector<actions::Action *> m_defaultActions[modsecurity::Phases::NUMBER_OF_PHASES];
|
std::vector<std::shared_ptr<actions::Action> > \
|
||||||
|
m_defaultActions[modsecurity::Phases::NUMBER_OF_PHASES];
|
||||||
ConfigUnicodeMap m_unicodeMapTable;
|
ConfigUnicodeMap m_unicodeMapTable;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ bool Block::evaluate(Rule *rule, Transaction *transaction,
|
|||||||
std::shared_ptr<RuleMessage> rm) {
|
std::shared_ptr<RuleMessage> rm) {
|
||||||
ms_dbg_a(transaction, 8, "Marking request as disruptive.");
|
ms_dbg_a(transaction, 8, "Marking request as disruptive.");
|
||||||
|
|
||||||
for (Action *a : transaction->m_rules->m_defaultActions[rule->m_phase]) {
|
for (auto &a : transaction->m_rules->m_defaultActions[rule->m_phase]) {
|
||||||
if (a->isDisruptive() == false) {
|
if (a->isDisruptive() == false) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1194,7 +1194,8 @@ expression:
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (actions::Action *a : checkedActions) {
|
for (actions::Action *a : checkedActions) {
|
||||||
driver.m_defaultActions[definedPhase].push_back(a);
|
driver.m_defaultActions[definedPhase].push_back(
|
||||||
|
std::unique_ptr<actions::Action>(a));
|
||||||
}
|
}
|
||||||
|
|
||||||
delete actions;
|
delete actions;
|
||||||
|
12
src/rule.cc
12
src/rule.cc
@ -389,13 +389,13 @@ std::list<std::pair<std::shared_ptr<std::string>,
|
|||||||
// Notice that first we make sure that won't be a t:none
|
// Notice that first we make sure that won't be a t:none
|
||||||
// on the target rule.
|
// on the target rule.
|
||||||
if (none == 0) {
|
if (none == 0) {
|
||||||
for (Action *a : trans->m_rules->m_defaultActions[this->m_phase]) {
|
for (auto &a : trans->m_rules->m_defaultActions[this->m_phase]) {
|
||||||
if (a->action_kind \
|
if (a->action_kind \
|
||||||
!= actions::Action::RunTimeBeforeMatchAttemptKind) {
|
!= actions::Action::RunTimeBeforeMatchAttemptKind) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
executeTransformation(a, &value, trans, &ret, &path,
|
executeTransformation(a.get(), &value, trans, &ret, &path,
|
||||||
&transformations);
|
&transformations);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -570,12 +570,12 @@ void Rule::executeActionsAfterFullMatch(Transaction *trans,
|
|||||||
bool containsBlock, std::shared_ptr<RuleMessage> ruleMessage) {
|
bool containsBlock, std::shared_ptr<RuleMessage> ruleMessage) {
|
||||||
bool disruptiveAlreadyExecuted = false;
|
bool disruptiveAlreadyExecuted = false;
|
||||||
|
|
||||||
for (Action *a : trans->m_rules->m_defaultActions[this->m_phase]) {
|
for (auto &a : trans->m_rules->m_defaultActions[this->m_phase]) {
|
||||||
if (a->action_kind != actions::Action::RunTimeOnlyIfMatchKind) {
|
if (a.get()->action_kind != actions::Action::RunTimeOnlyIfMatchKind) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!a->isDisruptive()) {
|
if (!a.get()->isDisruptive()) {
|
||||||
executeAction(trans, containsBlock, ruleMessage, a, true);
|
executeAction(trans, containsBlock, ruleMessage, a.get(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user