diff --git a/CHANGES b/CHANGES index 08c3e497..f43692ab 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ v3.x.y - YYYY-MMM-DD (to be released) ------------------------------------- - + + - Removed unnecessary while processing the transformations. + [#2368 - @WGH-, @zimmerle] - auditlog: Computes whether or not to save while loading the rules. [@zimmerle] - actions: Computes Rule association while loading the rules given a diff --git a/src/actions/transformations/css_decode.cc b/src/actions/transformations/css_decode.cc index afaaa2d0..081b7215 100644 --- a/src/actions/transformations/css_decode.cc +++ b/src/actions/transformations/css_decode.cc @@ -32,19 +32,10 @@ namespace transformations { void CssDecode::execute(const Transaction *t, const ModSecString &in, ModSecString &out) noexcept { - size_t s = in.size(); - - char *tmp = reinterpret_cast( - malloc(sizeof(char) * s + 1)); - memcpy(tmp, in.c_str(), s + 1); - tmp[s] = '\0'; - - size_t r = CssDecode::css_decode_inplace( - reinterpret_cast(tmp), - s); - - out.assign(tmp, r); - free(tmp); + out.assign(in); + auto size = CssDecode::css_decode_inplace( + reinterpret_cast(&out[0]), out.size()); + out.resize(size); } diff --git a/src/actions/transformations/escape_seq_decode.cc b/src/actions/transformations/escape_seq_decode.cc index 3bbcf9d2..f03255ea 100644 --- a/src/actions/transformations/escape_seq_decode.cc +++ b/src/actions/transformations/escape_seq_decode.cc @@ -135,14 +135,11 @@ int EscapeSeqDecode::ansi_c_sequences_decode_inplace(unsigned char *input, void EscapeSeqDecode::execute(const Transaction *t, const ModSecString &in, ModSecString &out) noexcept { - unsigned char *tmp = (unsigned char *) malloc(sizeof(char) - * in.size() + 1); - memcpy(tmp, in.c_str(), in.size() + 1); - tmp[in.size()] = '\0'; - int size = ansi_c_sequences_decode_inplace(tmp, in.size()); - out.assign(reinterpret_cast(tmp), size); - free(tmp); + out.assign(in); + auto size = ansi_c_sequences_decode_inplace( + reinterpret_cast(&out[0]), out.size()); + out.resize(size); } } // namespace transformations diff --git a/src/actions/transformations/hex_decode.cc b/src/actions/transformations/hex_decode.cc index b90bf1a0..6a43e975 100644 --- a/src/actions/transformations/hex_decode.cc +++ b/src/actions/transformations/hex_decode.cc @@ -34,22 +34,10 @@ namespace transformations { void HexDecode::execute(const Transaction *t, const ModSecString &in, ModSecString &out) noexcept { - unsigned char *input; - int size = 0; - - input = reinterpret_cast - (malloc(sizeof(char) * in.length()+1)); - - if (input == NULL) { - return; - } - - memcpy(input, in.c_str(), in.length()+1); - - size = inplace(input, in.length()); - - out.assign(reinterpret_cast(input), size); - free(input); + out.assign(in); + auto size = inplace(reinterpret_cast( + &out[0]), out.length()); + out.resize(size); } diff --git a/src/actions/transformations/html_entity_decode.cc b/src/actions/transformations/html_entity_decode.cc index 6e922ff0..64f5ce9a 100644 --- a/src/actions/transformations/html_entity_decode.cc +++ b/src/actions/transformations/html_entity_decode.cc @@ -32,21 +32,10 @@ namespace transformations { void HtmlEntityDecode::execute(const Transaction *t, const ModSecString &in, ModSecString &out) noexcept { - unsigned char *input; - - input = reinterpret_cast - (malloc(sizeof(char) * in.length()+1)); - - if (input == NULL) { - return; - } - - memcpy(input, in.c_str(), in.length()+1); - - size_t i = inplace(input, in.length()); - - out.assign(reinterpret_cast(input), i); - free(input); + out.assign(in); + auto i = inplace(reinterpret_cast( + &out[0]), out.length()); + out.resize(i); } diff --git a/src/actions/transformations/js_decode.cc b/src/actions/transformations/js_decode.cc index e659457c..b5779713 100644 --- a/src/actions/transformations/js_decode.cc +++ b/src/actions/transformations/js_decode.cc @@ -32,21 +32,11 @@ namespace transformations { void JsDecode::execute(const Transaction *t, const ModSecString &in, ModSecString &out) noexcept { - unsigned char *input; - input = reinterpret_cast - (malloc(sizeof(char) * in.length()+1)); - - if (input == NULL) { - return; - } - - memcpy(input, in.c_str(), in.length()+1); - - size_t i = inplace(input, in.length()); - - out.assign(reinterpret_cast(input), i); - free(input); + out.assign(in); + auto i = inplace(reinterpret_cast( + &out[0]), out.length()); + out.resize(i); } diff --git a/src/actions/transformations/normalise_path.cc b/src/actions/transformations/normalise_path.cc index fee87f3b..00d0c4fc 100644 --- a/src/actions/transformations/normalise_path.cc +++ b/src/actions/transformations/normalise_path.cc @@ -31,18 +31,9 @@ void NormalisePath::execute(const Transaction *t, const ModSecString &in, ModSecString &out) noexcept { int changed = 0; - - char *tmp = reinterpret_cast( - malloc(sizeof(char) * in.size() + 1)); - memcpy(tmp, in.c_str(), in.size() + 1); - tmp[in.size()] = '\0'; - - int i = normalize_path_inplace((unsigned char *)tmp, - in.size(), 0, &changed); - - std::string ret(""); - out.assign(tmp, i); - free(tmp); + out.assign(in); + auto size = normalize_path_inplace(reinterpret_cast(&out[0]), out.length(), 0, &changed); + out.resize(size); } diff --git a/src/actions/transformations/normalise_path_win.cc b/src/actions/transformations/normalise_path_win.cc index 5f8b0c76..8ac4b595 100644 --- a/src/actions/transformations/normalise_path_win.cc +++ b/src/actions/transformations/normalise_path_win.cc @@ -36,18 +36,10 @@ void NormalisePathWin::execute(const Transaction *t, ModSecString &out) noexcept { int changed; - char *tmp = reinterpret_cast( - malloc(sizeof(char) * in.size() + 1)); - memcpy(tmp, in.c_str(), in.size() + 1); - tmp[in.size()] = '\0'; - - int i = NormalisePath::normalize_path_inplace( - reinterpret_cast(tmp), - in.size(), 1, &changed); - - std::string ret(""); - out.assign(tmp, i); - free(tmp); + out.assign(in); + auto size = NormalisePath::normalize_path_inplace( + reinterpret_cast(&out[0]), out.length(), 1, &changed); + out.resize(size); } diff --git a/src/actions/transformations/parity_even_7bit.cc b/src/actions/transformations/parity_even_7bit.cc index ce7a313c..38d0676c 100644 --- a/src/actions/transformations/parity_even_7bit.cc +++ b/src/actions/transformations/parity_even_7bit.cc @@ -30,21 +30,8 @@ namespace transformations { void ParityEven7bit::execute(const Transaction *t, const ModSecString &in, ModSecString &out) noexcept { - unsigned char *input; - - input = reinterpret_cast - (malloc(sizeof(char) * in.length()+1)); - - if (input == NULL) { - return; - } - - std::memcpy(input, in.c_str(), in.length()+1); - - inplace(input, in.length()); - - out.assign(reinterpret_cast(input), in.length()); - free(input); + out.assign(in); + inplace(reinterpret_cast(&out[0]), out.size()); } diff --git a/src/actions/transformations/parity_odd_7bit.cc b/src/actions/transformations/parity_odd_7bit.cc index 735f3e93..629f2914 100644 --- a/src/actions/transformations/parity_odd_7bit.cc +++ b/src/actions/transformations/parity_odd_7bit.cc @@ -30,21 +30,8 @@ namespace transformations { void ParityOdd7bit::execute(const Transaction *t, const ModSecString &in, ModSecString &out) noexcept { - unsigned char *input; - - input = reinterpret_cast - (malloc(sizeof(char) * in.length()+1)); - - if (input == NULL) { - return; - } - - memcpy(input, in.c_str(), in.length()+1); - - inplace(input, in.length()); - - out.assign(reinterpret_cast(input), in.length()); - free(input); + out.assign(in); + inplace(reinterpret_cast(&out[0]), out.length()); } diff --git a/src/actions/transformations/parity_zero_7bit.cc b/src/actions/transformations/parity_zero_7bit.cc index 6ddd8ef3..4e785a7b 100644 --- a/src/actions/transformations/parity_zero_7bit.cc +++ b/src/actions/transformations/parity_zero_7bit.cc @@ -30,21 +30,8 @@ namespace transformations { void ParityZero7bit::execute(const Transaction *t, const ModSecString &in, ModSecString &out) noexcept { - unsigned char *input; - - input = reinterpret_cast - (malloc(sizeof(char) * in.length()+1)); - - if (input == NULL) { - return; - } - - memcpy(input, in.c_str(), in.length()+1); - - inplace(input, in.length()); - - out.assign(reinterpret_cast(input), in.length()); - free(input); + out.assign(in); + inplace(reinterpret_cast(&out[0]), out.length()); } diff --git a/src/actions/transformations/sql_hex_decode.cc b/src/actions/transformations/sql_hex_decode.cc index 20676c34..b7cefc19 100644 --- a/src/actions/transformations/sql_hex_decode.cc +++ b/src/actions/transformations/sql_hex_decode.cc @@ -32,22 +32,9 @@ namespace transformations { void SqlHexDecode::execute(const Transaction *t, const ModSecString &in, ModSecString &out) noexcept { - unsigned char *input; - int size = 0; - - input = reinterpret_cast - (malloc(sizeof(char) * in.length()+1)); - - if (input == NULL) { - return; - } - - memcpy(input, in.c_str(), in.length()+1); - - size = inplace(input, in.length()); - - out.assign(reinterpret_cast(input), size); - free(input); + out.assign(in); + auto size = inplace(reinterpret_cast(&out[0]), out.size()); + out.resize(size); } diff --git a/src/actions/transformations/url_decode.cc b/src/actions/transformations/url_decode.cc index 4ec251fd..fcdbbf35 100644 --- a/src/actions/transformations/url_decode.cc +++ b/src/actions/transformations/url_decode.cc @@ -32,19 +32,14 @@ namespace transformations { void UrlDecode::execute(const Transaction *t, const ModSecString &in, ModSecString &out) noexcept { - unsigned char *val(NULL); int invalid_count = 0; int changed; - val = (unsigned char *) malloc(sizeof(char) * in.size() + 1); - memcpy(val, in.c_str(), in.size() + 1); - val[in.size()] = '\0'; - - int size = utils::urldecode_nonstrict_inplace(val, in.size(), + out.assign(in); + int size = utils::urldecode_nonstrict_inplace( + reinterpret_cast(&out[0]), out.size(), &invalid_count, &changed); - out.append((const char *)val, size); - - free(val); + out.resize(size); } diff --git a/src/actions/transformations/url_decode_uni.cc b/src/actions/transformations/url_decode_uni.cc index 377c1329..77f16ff8 100644 --- a/src/actions/transformations/url_decode_uni.cc +++ b/src/actions/transformations/url_decode_uni.cc @@ -33,21 +33,9 @@ namespace transformations { void UrlDecodeUni::execute(const Transaction *t, const ModSecString &in, ModSecString &out) noexcept { - unsigned char *input; - - input = reinterpret_cast - (malloc(sizeof(char) * in.length()+1)); - - if (input == NULL) { - return; - } - - memcpy(input, in.c_str(), in.length()+1); - - size_t i = inplace(input, in.length(), t); - - out.assign(reinterpret_cast(input), i); - free(input); + out.assign(in); + size_t i = inplace(reinterpret_cast(&out[0]), out.length(), t); + out.resize(i); } diff --git a/src/actions/transformations/utf8_to_unicode.cc b/src/actions/transformations/utf8_to_unicode.cc index ad5f314e..824ce7dd 100644 --- a/src/actions/transformations/utf8_to_unicode.cc +++ b/src/actions/transformations/utf8_to_unicode.cc @@ -32,31 +32,19 @@ namespace transformations { void Utf8ToUnicode::execute(const Transaction *t, const ModSecString &in, ModSecString &out) noexcept { - unsigned char *input; int changed = 0; char *out2; - input = reinterpret_cast - (malloc(sizeof(char) * in.length()+1)); - - if (input == NULL) { - return; - } - - memset(input, '\0', in.length()+1); - memcpy(input, in.c_str(), in.length()+1); - - out2 = inplace(input, in.size() + 1, &changed); + out2 = inplace(reinterpret_cast(&in[0]), in.size() + 1, &changed); if (out2 != NULL) { out.assign(reinterpret_cast(out2), strlen(reinterpret_cast(out2))); free(out2); } - free(input); } -char *Utf8ToUnicode::inplace(unsigned char *input, +char *Utf8ToUnicode::inplace(const unsigned char *input, uint64_t input_len, int *changed) { unsigned int count = 0; char *data; @@ -84,7 +72,7 @@ char *Utf8ToUnicode::inplace(unsigned char *input, int unicode_len = 0; unsigned int d = 0; unsigned char c; - unsigned char *utf = (unsigned char *)&input[i]; + const unsigned char *utf = &input[i]; c = *utf; diff --git a/src/actions/transformations/utf8_to_unicode.h b/src/actions/transformations/utf8_to_unicode.h index 468d6dbf..5b0c37d4 100644 --- a/src/actions/transformations/utf8_to_unicode.h +++ b/src/actions/transformations/utf8_to_unicode.h @@ -50,7 +50,7 @@ class Utf8ToUnicode : public Transformation { UNICODE_ERROR_DECODING_ERROR = -5 }; - static char *inplace(unsigned char *input, uint64_t input_len, + static char *inplace(const unsigned char *input, uint64_t input_len, int *changed); };