Having macro to support variable modificator count

This commit is contained in:
Felipe Zimmerle 2020-12-02 13:58:02 -03:00
parent b8478b11bb
commit 7857031f56
No known key found for this signature in database
GPG Key ID: E6DFB08CE8B11277
6 changed files with 5506 additions and 5449 deletions

File diff suppressed because it is too large Load Diff

View File

@ -8010,7 +8010,7 @@ switch (yykind)
/// Constants. /// Constants.
enum enum
{ {
yylast_ = 3379, ///< Last index in yytable_. yylast_ = 3145, ///< Last index in yytable_.
yynnts_ = 16, ///< Number of nonterminal symbols. yynnts_ = 16, ///< Number of nonterminal symbols.
yyfinal_ = 338 ///< Termination state number. yyfinal_ = 338 ///< Termination state number.
}; };

View File

@ -3047,6 +3047,12 @@ run_time_string:
$1->append(std::move($2)); $1->append(std::move($2));
$$ = std::move($1); $$ = std::move($1);
} }
| run_time_string VAR_COUNT var
{
std::unique_ptr<Variable> c(new VariableModificatorCount(std::move($3)));
$1->append(std::move(c));
$$ = std::move($1);
}
| FREE_TEXT_QUOTE_MACRO_EXPANSION | FREE_TEXT_QUOTE_MACRO_EXPANSION
{ {
std::unique_ptr<RunTimeString> r(new RunTimeString()); std::unique_ptr<RunTimeString> r(new RunTimeString());
@ -3059,6 +3065,13 @@ run_time_string:
r->append(std::move($1)); r->append(std::move($1));
$$ = std::move(r); $$ = std::move(r);
} }
| VAR_COUNT var
{
std::unique_ptr<RunTimeString> r(new RunTimeString());
std::unique_ptr<Variable> c(new VariableModificatorCount(std::move($2)));
r->append(std::move(c));
$$ = std::move(r);
}
; ;
%% %%

File diff suppressed because it is too large Load Diff

View File

@ -898,6 +898,10 @@ EQUALS_LESS (?i:=\<)
} }
<EXPECTING_ACTION_PREDICATE_VARIABLE>{
{VAR_COUNT} { return p::make_VAR_COUNT(*driver.loc.back()); }
}
<EXPECTING_VARIABLE,EXPECTING_ACTION_PREDICATE_VARIABLE>{ <EXPECTING_VARIABLE,EXPECTING_ACTION_PREDICATE_VARIABLE>{
. { BEGIN(LEXING_ERROR_VARIABLE); yyless(0); } . { BEGIN(LEXING_ERROR_VARIABLE); yyless(0); }
{VARIABLE_ARGS_COMBINED_SIZE} { return p::make_VARIABLE_ARGS_COMBINED_SIZE(*driver.loc.back()); } {VARIABLE_ARGS_COMBINED_SIZE} { return p::make_VARIABLE_ARGS_COMBINED_SIZE(*driver.loc.back()); }

View File

@ -3,7 +3,7 @@
"enabled":1, "enabled":1,
"version_min":300000, "version_min":300000,
"version_max":0, "version_max":0,
"title":"Testing collection :: TX (with macro) (1/4)", "title":"Testing collection :: TX (with macro) (1/n)",
"client":{ "client":{
"ip":"200.249.12.31", "ip":"200.249.12.31",
"port":2313 "port":2313
@ -61,7 +61,7 @@
"enabled":1, "enabled":1,
"version_min":300000, "version_min":300000,
"version_max":0, "version_max":0,
"title":"Testing collection :: TX (with macro) (2/4)", "title":"Testing collection :: TX (with macro) (2/n)",
"client":{ "client":{
"ip":"200.249.12.31", "ip":"200.249.12.31",
"port":2313 "port":2313
@ -119,7 +119,7 @@
"enabled":1, "enabled":1,
"version_min":300000, "version_min":300000,
"version_max":0, "version_max":0,
"title":"Testing collection :: TX (with macro) (3/4)", "title":"Testing collection :: TX (with macro) (3/n)",
"client":{ "client":{
"ip":"200.249.12.31", "ip":"200.249.12.31",
"port":2313 "port":2313
@ -178,7 +178,7 @@
"enabled":1, "enabled":1,
"version_min":300000, "version_min":300000,
"version_max":0, "version_max":0,
"title":"Testing collection :: TX (with macro) (4/4)", "title":"Testing collection :: TX (with macro) (4/n)",
"client":{ "client":{
"ip":"200.249.12.31", "ip":"200.249.12.31",
"port":2313 "port":2313
@ -233,5 +233,63 @@
"SecRule REQUEST_HEADERS \"@contains PHPSESSID\" \"id:3,t:lowercase,t:none,setvar:TX.something_else=-5\"", "SecRule REQUEST_HEADERS \"@contains PHPSESSID\" \"id:3,t:lowercase,t:none,setvar:TX.something_else=-5\"",
"SecRule TX:something_else \"@contains to_test\" \"id:4,t:lowercase,t:none\"" "SecRule TX:something_else \"@contains to_test\" \"id:4,t:lowercase,t:none\""
] ]
},
{
"enabled":1,
"version_min":300000,
"version_max":0,
"title":"Testing collection :: TX (with macro) (5/n)",
"client":{
"ip":"200.249.12.31",
"port":2313
},
"server":{
"ip":"200.249.12.31",
"port":80
},
"request":{
"headers":{
"User-Agent":"Mozilla\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko\/20091102 Firefox\/3.5.5 (.NET CLR 3.5.30729)",
"Accept":"text\/html,application\/xhtml+xml,application\/xml;q=0.9,*\/*;q=0.8",
"Accept-Language":"en-us,en;q=0.5",
"Accept-Encoding":"gzip,deflate",
"Accept-Charset":"ISO-8859-1,utf-8;q=0.7,*;q=0.7",
"Keep-Alive":"300",
"Connection":"keep-alive",
"Cookie":"PHPSESSID=rAAAAAAA2t5uvjq435r4q7ib3vtdjq120",
"Pragma":"no-cache",
"Cache-Control":"no-cache"
},
"uri":"\/test.pl?param1= test &param2=test2",
"method":"GET",
"http_version":1.1,
"body":""
},
"response":{
"headers":{
"Content-Type":"text\/xml; charset=utf-8\n\r",
"Content-Length":"length\n\r"
},
"body":[
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\r",
"<soap:Envelope xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xmlns:xsd=\"http:\/\/www.w3.org\/2001\/XMLSchema\" xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\">\n\r",
" <soap:Body>\n\r",
" <EnlightenResponse xmlns=\"http:\/\/clearforest.com\/\">\n\r",
" <EnlightenResult>string<\/EnlightenResult>\n\r",
" <\/EnlightenResponse>\n\r",
" <\/soap:Body>\n\r",
"<\/soap:Envelope>\n\r"
]
},
"expected":{
"audit_log":"",
"debug_log":"Saving msg: Number of request hearders: 10",
"error_log":"Number of request hearders: 10",
"http_code":403
},
"rules":[
"SecRuleEngine On",
"SecRule REQUEST_HEADERS \".*\" \"id:1,msg:'Number of request hearders: %{&REQUEST_HEADERS}',deny\""
]
} }
] ]