11/*
22 * ModSecurity, http://www.modsecurity.org/
3- * Copyright (c) 2015 - 2021 Trustwave Holdings, Inc. (http://www.trustwave.com/)
3+ * Copyright (c) 2015 - 2023 Trustwave Holdings, Inc. (http://www.trustwave.com/)
44 *
55 * You may not use this file except in compliance with
66 * the License. You may obtain a copy of the License at
1515
1616#include " src/actions/transformations/remove_comments_char.h"
1717
18- #include < iostream>
1918#include < string>
20- #include < algorithm>
21- #include < functional>
22- #include < cctype>
23- #include < locale>
2419
2520#include " modsecurity/transaction.h"
2621#include " src/actions/transformations/transformation.h"
@@ -37,39 +32,40 @@ RemoveCommentsChar::RemoveCommentsChar(const std::string &action)
3732
3833std::string RemoveCommentsChar::evaluate (const std::string &val,
3934 Transaction *transaction) {
40- int64_t i;
41- std::string value (val);
35+ size_t i = 0 ;
36+ std::string transformed_value;
37+ transformed_value.reserve (val.size ());
4238
43- i = 0 ;
44- while (i < value.size ()) {
45- if (value.at (i) == ' /'
46- && (i+1 < value.size ()) && value.at (i+1 ) == ' *' ) {
47- value.erase (i, 2 );
48- } else if (value.at (i) == ' *'
49- && (i+1 < value.size ()) && value.at (i+1 ) == ' /' ) {
50- value.erase (i, 2 );
51- } else if (value.at (i) == ' <'
52- && (i+1 < value.size ())
53- && value.at (i+1 ) == ' !'
54- && (i+2 < value.size ())
55- && value.at (i+2 ) == ' -'
56- && (i+3 < value.size ())
57- && value.at (i+3 ) == ' -' ) {
58- value.erase (i, 4 );
59- } else if (value.at (i) == ' -'
60- && (i+1 < value.size ()) && value.at (i+1 ) == ' -'
61- && (i+2 < value.size ()) && value.at (i+2 ) == ' >' ) {
62- value.erase (i, 3 );
63- } else if (value.at (i) == ' -'
64- && (i+1 < value.size ()) && value.at (i+1 ) == ' -' ) {
65- value.erase (i, 2 );
66- } else if (value.at (i) == ' #' ) {
67- value.erase (i, 1 );
39+ while (i < val.size ()) {
40+ if (val.at (i) == ' /'
41+ && (i+1 < val.size ()) && val.at (i+1 ) == ' *' ) {
42+ i += 2 ;
43+ } else if (val.at (i) == ' *'
44+ && (i+1 < val.size ()) && val.at (i+1 ) == ' /' ) {
45+ i += 2 ;
46+ } else if (val.at (i) == ' <'
47+ && (i+1 < val.size ())
48+ && val.at (i+1 ) == ' !'
49+ && (i+2 < val.size ())
50+ && val.at (i+2 ) == ' -'
51+ && (i+3 < val.size ())
52+ && val.at (i+3 ) == ' -' ) {
53+ i += 4 ;
54+ } else if (val.at (i) == ' -'
55+ && (i+1 < val.size ()) && val.at (i+1 ) == ' -'
56+ && (i+2 < val.size ()) && val.at (i+2 ) == ' >' ) {
57+ i += 3 ;
58+ } else if (val.at (i) == ' -'
59+ && (i+1 < val.size ()) && val.at (i+1 ) == ' -' ) {
60+ i += 2 ;
61+ } else if (val.at (i) == ' #' ) {
62+ i += 1 ;
6863 } else {
64+ transformed_value += val.at (i);
6965 i++;
7066 }
7167 }
72- return value ;
68+ return transformed_value ;
7369}
7470
7571} // namespace transformations
0 commit comments