diff --git a/src/actions/transformations/trim.cc b/src/actions/transformations/trim.cc index a5515346..bc90b4ec 100644 --- a/src/actions/transformations/trim.cc +++ b/src/actions/transformations/trim.cc @@ -15,36 +15,43 @@ #include "trim.h" +#include + namespace modsecurity::actions::transformations { -std::string *Trim::ltrim(std::string *s) { - s->erase( - s->begin(), - std::find_if(s->begin(), s->end(), [](unsigned char c) { +bool Trim::ltrim(std::string &s) { + auto it = std::find_if(s.begin(), s.end(), [](unsigned char c) { return !std::isspace(c); - }) - ); + }); - return s; + const bool changed = it != s.begin(); + + s.erase(s.begin(), it); + + return changed; } -std::string *Trim::rtrim(std::string *s) { - s->erase( - std::find_if(s->rbegin(), s->rend(), [](unsigned char c) { +bool Trim::rtrim(std::string &s) { + auto it = std::find_if(s.rbegin(), s.rend(), [](unsigned char c) { return !std::isspace(c); - }).base(), - s->end() - ); + }).base(); - return s; + const bool changed = it != s.end(); + + s.erase(it, s.end()); + + return changed; } -std::string *Trim::trim(std::string *s) { - return ltrim(rtrim(s)); +bool Trim::trim(std::string &s) { + bool changed = false; + changed |= rtrim(s); + changed |= ltrim(s); + return changed; } @@ -55,11 +62,7 @@ Trim::Trim(const std::string &action) bool Trim::transform(std::string &value, const Transaction *trans) const { - std::string ret(value); - this->trim(&ret); - const auto changed = ret != value; - value = ret; - return changed; + return trim(value); } diff --git a/src/actions/transformations/trim.h b/src/actions/transformations/trim.h index 3b0e82d9..0e3d26f6 100644 --- a/src/actions/transformations/trim.h +++ b/src/actions/transformations/trim.h @@ -26,9 +26,11 @@ class Trim : public Transformation { bool transform(std::string &value, const Transaction *trans) const override; - static std::string *ltrim(std::string *s); - static std::string *rtrim(std::string *s); - static std::string *trim(std::string *s); + protected: + + static bool ltrim(std::string &s); + static bool rtrim(std::string &s); + static bool trim(std::string &s); }; } // namespace modsecurity::actions::transformations diff --git a/src/actions/transformations/trim_left.cc b/src/actions/transformations/trim_left.cc index c141727a..10276acf 100644 --- a/src/actions/transformations/trim_left.cc +++ b/src/actions/transformations/trim_left.cc @@ -26,11 +26,7 @@ TrimLeft::TrimLeft(const std::string &action) } bool TrimLeft::transform(std::string &value, const Transaction *trans) const { - std::string ret(value); - this->ltrim(&ret); - const auto changed = ret != value; - value = ret; - return changed; + return ltrim(value); } diff --git a/src/actions/transformations/trim_right.cc b/src/actions/transformations/trim_right.cc index b95b63aa..aa38c348 100644 --- a/src/actions/transformations/trim_right.cc +++ b/src/actions/transformations/trim_right.cc @@ -25,11 +25,7 @@ TrimRight::TrimRight(const std::string &action) } bool TrimRight::transform(std::string &value, const Transaction *trans) const { - std::string ret(value); - this->rtrim(&ret); - const auto changed = ret != value; - value = ret; - return changed; + return rtrim(value); }