mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2026-01-01 14:15:46 +03:00
Using RunTimeString on setvar action
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -276,6 +276,7 @@ class Driver;
|
||||
#include "src/variables/tx.h"
|
||||
#include "src/variables/unique_id.h"
|
||||
#include "src/variables/url_encoded_error.h"
|
||||
#include "src/variables/user.h"
|
||||
#include "src/variables/user_id.h"
|
||||
#include "src/variables/variable.h"
|
||||
#include "src/variables/xml.h"
|
||||
@@ -377,7 +378,7 @@ using modsecurity::operators::Operator;
|
||||
|
||||
|
||||
|
||||
#line 381 "seclang-parser.hh" // lalr1.cc:377
|
||||
#line 382 "seclang-parser.hh" // lalr1.cc:377
|
||||
|
||||
# include <cassert>
|
||||
# include <cstdlib> // std::abort
|
||||
@@ -454,7 +455,7 @@ using modsecurity::operators::Operator;
|
||||
|
||||
|
||||
namespace yy {
|
||||
#line 458 "seclang-parser.hh" // lalr1.cc:377
|
||||
#line 459 "seclang-parser.hh" // lalr1.cc:377
|
||||
|
||||
|
||||
|
||||
@@ -785,13 +786,10 @@ namespace yy {
|
||||
// "RUN_TIME_VAR_TIME_SEC"
|
||||
// "RUN_TIME_VAR_TIME_WDAY"
|
||||
// "RUN_TIME_VAR_TIME_YEAR"
|
||||
// "SETVAR_VARIABLE_PART"
|
||||
// "SETVAR_CONTENT_PART"
|
||||
// "VARIABLE"
|
||||
// "Dictionary element"
|
||||
// "Dictionary element, selected by regexp"
|
||||
// setvar_variable
|
||||
// setvar_content
|
||||
char dummy1[sizeof(std::string)];
|
||||
|
||||
// op
|
||||
@@ -1141,11 +1139,10 @@ namespace yy {
|
||||
TOK_RUN_TIME_VAR_TIME_SEC = 558,
|
||||
TOK_RUN_TIME_VAR_TIME_WDAY = 559,
|
||||
TOK_RUN_TIME_VAR_TIME_YEAR = 560,
|
||||
TOK_SETVAR_VARIABLE_PART = 561,
|
||||
TOK_SETVAR_CONTENT_PART = 562,
|
||||
TOK_VARIABLE = 563,
|
||||
TOK_DICT_ELEMENT = 564,
|
||||
TOK_DICT_ELEMENT_REGEXP = 565
|
||||
TOK_SETVAR_CONTENT_PART = 561,
|
||||
TOK_VARIABLE = 562,
|
||||
TOK_DICT_ELEMENT = 563,
|
||||
TOK_DICT_ELEMENT_REGEXP = 564
|
||||
};
|
||||
};
|
||||
|
||||
@@ -2480,10 +2477,6 @@ namespace yy {
|
||||
symbol_type
|
||||
make_RUN_TIME_VAR_TIME_YEAR (const std::string& v, const location_type& l);
|
||||
|
||||
static inline
|
||||
symbol_type
|
||||
make_SETVAR_VARIABLE_PART (const std::string& v, const location_type& l);
|
||||
|
||||
static inline
|
||||
symbol_type
|
||||
make_SETVAR_CONTENT_PART (const std::string& v, const location_type& l);
|
||||
@@ -2705,12 +2698,12 @@ namespace yy {
|
||||
enum
|
||||
{
|
||||
yyeof_ = 0,
|
||||
yylast_ = 2040, ///< Last index in yytable_.
|
||||
yynnts_ = 17, ///< Number of nonterminal symbols.
|
||||
yyfinal_ = 293, ///< Termination state number.
|
||||
yylast_ = 3071, ///< Last index in yytable_.
|
||||
yynnts_ = 15, ///< Number of nonterminal symbols.
|
||||
yyfinal_ = 294, ///< Termination state number.
|
||||
yyterror_ = 1,
|
||||
yyerrcode_ = 256,
|
||||
yyntokens_ = 311 ///< Number of tokens.
|
||||
yyntokens_ = 310 ///< Number of tokens.
|
||||
};
|
||||
|
||||
|
||||
@@ -2783,9 +2776,9 @@ namespace yy {
|
||||
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
|
||||
285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
|
||||
295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
|
||||
305, 306, 307, 308, 309, 310
|
||||
305, 306, 307, 308, 309
|
||||
};
|
||||
const unsigned int user_token_number_max_ = 565;
|
||||
const unsigned int user_token_number_max_ = 564;
|
||||
const token_number_type undef_token_ = 2;
|
||||
|
||||
if (static_cast<int>(t) <= yyeof_)
|
||||
@@ -2982,41 +2975,38 @@ namespace yy {
|
||||
case 303: // "RUN_TIME_VAR_TIME_SEC"
|
||||
case 304: // "RUN_TIME_VAR_TIME_WDAY"
|
||||
case 305: // "RUN_TIME_VAR_TIME_YEAR"
|
||||
case 306: // "SETVAR_VARIABLE_PART"
|
||||
case 307: // "SETVAR_CONTENT_PART"
|
||||
case 308: // "VARIABLE"
|
||||
case 309: // "Dictionary element"
|
||||
case 310: // "Dictionary element, selected by regexp"
|
||||
case 325: // setvar_variable
|
||||
case 326: // setvar_content
|
||||
case 306: // "SETVAR_CONTENT_PART"
|
||||
case 307: // "VARIABLE"
|
||||
case 308: // "Dictionary element"
|
||||
case 309: // "Dictionary element, selected by regexp"
|
||||
value.copy< std::string > (other.value);
|
||||
break;
|
||||
|
||||
case 317: // op
|
||||
case 318: // op_before_init
|
||||
case 316: // op
|
||||
case 317: // op_before_init
|
||||
value.copy< std::unique_ptr<Operator> > (other.value);
|
||||
break;
|
||||
|
||||
case 327: // run_time_string
|
||||
case 324: // run_time_string
|
||||
value.copy< std::unique_ptr<RunTimeString> > (other.value);
|
||||
break;
|
||||
|
||||
case 322: // var
|
||||
case 321: // var
|
||||
value.copy< std::unique_ptr<Variable> > (other.value);
|
||||
break;
|
||||
|
||||
case 323: // act
|
||||
case 324: // setvar_action
|
||||
case 322: // act
|
||||
case 323: // setvar_action
|
||||
value.copy< std::unique_ptr<actions::Action> > (other.value);
|
||||
break;
|
||||
|
||||
case 320: // variables
|
||||
case 321: // variables_may_be_quoted
|
||||
case 319: // variables
|
||||
case 320: // variables_may_be_quoted
|
||||
value.copy< std::unique_ptr<std::vector<std::unique_ptr<Variable> > > > (other.value);
|
||||
break;
|
||||
|
||||
case 315: // actions
|
||||
case 316: // actions_may_quoted
|
||||
case 314: // actions
|
||||
case 315: // actions_may_quoted
|
||||
value.copy< std::unique_ptr<std::vector<std::unique_ptr<actions::Action> > > > (other.value);
|
||||
break;
|
||||
|
||||
@@ -3201,41 +3191,38 @@ namespace yy {
|
||||
case 303: // "RUN_TIME_VAR_TIME_SEC"
|
||||
case 304: // "RUN_TIME_VAR_TIME_WDAY"
|
||||
case 305: // "RUN_TIME_VAR_TIME_YEAR"
|
||||
case 306: // "SETVAR_VARIABLE_PART"
|
||||
case 307: // "SETVAR_CONTENT_PART"
|
||||
case 308: // "VARIABLE"
|
||||
case 309: // "Dictionary element"
|
||||
case 310: // "Dictionary element, selected by regexp"
|
||||
case 325: // setvar_variable
|
||||
case 326: // setvar_content
|
||||
case 306: // "SETVAR_CONTENT_PART"
|
||||
case 307: // "VARIABLE"
|
||||
case 308: // "Dictionary element"
|
||||
case 309: // "Dictionary element, selected by regexp"
|
||||
value.copy< std::string > (v);
|
||||
break;
|
||||
|
||||
case 317: // op
|
||||
case 318: // op_before_init
|
||||
case 316: // op
|
||||
case 317: // op_before_init
|
||||
value.copy< std::unique_ptr<Operator> > (v);
|
||||
break;
|
||||
|
||||
case 327: // run_time_string
|
||||
case 324: // run_time_string
|
||||
value.copy< std::unique_ptr<RunTimeString> > (v);
|
||||
break;
|
||||
|
||||
case 322: // var
|
||||
case 321: // var
|
||||
value.copy< std::unique_ptr<Variable> > (v);
|
||||
break;
|
||||
|
||||
case 323: // act
|
||||
case 324: // setvar_action
|
||||
case 322: // act
|
||||
case 323: // setvar_action
|
||||
value.copy< std::unique_ptr<actions::Action> > (v);
|
||||
break;
|
||||
|
||||
case 320: // variables
|
||||
case 321: // variables_may_be_quoted
|
||||
case 319: // variables
|
||||
case 320: // variables_may_be_quoted
|
||||
value.copy< std::unique_ptr<std::vector<std::unique_ptr<Variable> > > > (v);
|
||||
break;
|
||||
|
||||
case 315: // actions
|
||||
case 316: // actions_may_quoted
|
||||
case 314: // actions
|
||||
case 315: // actions_may_quoted
|
||||
value.copy< std::unique_ptr<std::vector<std::unique_ptr<actions::Action> > > > (v);
|
||||
break;
|
||||
|
||||
@@ -3493,41 +3480,38 @@ namespace yy {
|
||||
case 303: // "RUN_TIME_VAR_TIME_SEC"
|
||||
case 304: // "RUN_TIME_VAR_TIME_WDAY"
|
||||
case 305: // "RUN_TIME_VAR_TIME_YEAR"
|
||||
case 306: // "SETVAR_VARIABLE_PART"
|
||||
case 307: // "SETVAR_CONTENT_PART"
|
||||
case 308: // "VARIABLE"
|
||||
case 309: // "Dictionary element"
|
||||
case 310: // "Dictionary element, selected by regexp"
|
||||
case 325: // setvar_variable
|
||||
case 326: // setvar_content
|
||||
case 306: // "SETVAR_CONTENT_PART"
|
||||
case 307: // "VARIABLE"
|
||||
case 308: // "Dictionary element"
|
||||
case 309: // "Dictionary element, selected by regexp"
|
||||
value.template destroy< std::string > ();
|
||||
break;
|
||||
|
||||
case 317: // op
|
||||
case 318: // op_before_init
|
||||
case 316: // op
|
||||
case 317: // op_before_init
|
||||
value.template destroy< std::unique_ptr<Operator> > ();
|
||||
break;
|
||||
|
||||
case 327: // run_time_string
|
||||
case 324: // run_time_string
|
||||
value.template destroy< std::unique_ptr<RunTimeString> > ();
|
||||
break;
|
||||
|
||||
case 322: // var
|
||||
case 321: // var
|
||||
value.template destroy< std::unique_ptr<Variable> > ();
|
||||
break;
|
||||
|
||||
case 323: // act
|
||||
case 324: // setvar_action
|
||||
case 322: // act
|
||||
case 323: // setvar_action
|
||||
value.template destroy< std::unique_ptr<actions::Action> > ();
|
||||
break;
|
||||
|
||||
case 320: // variables
|
||||
case 321: // variables_may_be_quoted
|
||||
case 319: // variables
|
||||
case 320: // variables_may_be_quoted
|
||||
value.template destroy< std::unique_ptr<std::vector<std::unique_ptr<Variable> > > > ();
|
||||
break;
|
||||
|
||||
case 315: // actions
|
||||
case 316: // actions_may_quoted
|
||||
case 314: // actions
|
||||
case 315: // actions_may_quoted
|
||||
value.template destroy< std::unique_ptr<std::vector<std::unique_ptr<actions::Action> > > > ();
|
||||
break;
|
||||
|
||||
@@ -3718,41 +3702,38 @@ namespace yy {
|
||||
case 303: // "RUN_TIME_VAR_TIME_SEC"
|
||||
case 304: // "RUN_TIME_VAR_TIME_WDAY"
|
||||
case 305: // "RUN_TIME_VAR_TIME_YEAR"
|
||||
case 306: // "SETVAR_VARIABLE_PART"
|
||||
case 307: // "SETVAR_CONTENT_PART"
|
||||
case 308: // "VARIABLE"
|
||||
case 309: // "Dictionary element"
|
||||
case 310: // "Dictionary element, selected by regexp"
|
||||
case 325: // setvar_variable
|
||||
case 326: // setvar_content
|
||||
case 306: // "SETVAR_CONTENT_PART"
|
||||
case 307: // "VARIABLE"
|
||||
case 308: // "Dictionary element"
|
||||
case 309: // "Dictionary element, selected by regexp"
|
||||
value.move< std::string > (s.value);
|
||||
break;
|
||||
|
||||
case 317: // op
|
||||
case 318: // op_before_init
|
||||
case 316: // op
|
||||
case 317: // op_before_init
|
||||
value.move< std::unique_ptr<Operator> > (s.value);
|
||||
break;
|
||||
|
||||
case 327: // run_time_string
|
||||
case 324: // run_time_string
|
||||
value.move< std::unique_ptr<RunTimeString> > (s.value);
|
||||
break;
|
||||
|
||||
case 322: // var
|
||||
case 321: // var
|
||||
value.move< std::unique_ptr<Variable> > (s.value);
|
||||
break;
|
||||
|
||||
case 323: // act
|
||||
case 324: // setvar_action
|
||||
case 322: // act
|
||||
case 323: // setvar_action
|
||||
value.move< std::unique_ptr<actions::Action> > (s.value);
|
||||
break;
|
||||
|
||||
case 320: // variables
|
||||
case 321: // variables_may_be_quoted
|
||||
case 319: // variables
|
||||
case 320: // variables_may_be_quoted
|
||||
value.move< std::unique_ptr<std::vector<std::unique_ptr<Variable> > > > (s.value);
|
||||
break;
|
||||
|
||||
case 315: // actions
|
||||
case 316: // actions_may_quoted
|
||||
case 314: // actions
|
||||
case 315: // actions_may_quoted
|
||||
value.move< std::unique_ptr<std::vector<std::unique_ptr<actions::Action> > > > (s.value);
|
||||
break;
|
||||
|
||||
@@ -3841,8 +3822,7 @@ namespace yy {
|
||||
525, 526, 527, 528, 529, 530, 531, 532, 533, 534,
|
||||
535, 536, 537, 538, 539, 540, 541, 542, 543, 544,
|
||||
545, 546, 547, 548, 549, 550, 551, 552, 553, 554,
|
||||
555, 556, 557, 558, 559, 560, 561, 562, 563, 564,
|
||||
565
|
||||
555, 556, 557, 558, 559, 560, 561, 562, 563, 564
|
||||
};
|
||||
return static_cast<token_type> (yytoken_number_[type]);
|
||||
}
|
||||
@@ -5671,12 +5651,6 @@ namespace yy {
|
||||
return symbol_type (token::TOK_RUN_TIME_VAR_TIME_YEAR, v, l);
|
||||
}
|
||||
|
||||
seclang_parser::symbol_type
|
||||
seclang_parser::make_SETVAR_VARIABLE_PART (const std::string& v, const location_type& l)
|
||||
{
|
||||
return symbol_type (token::TOK_SETVAR_VARIABLE_PART, v, l);
|
||||
}
|
||||
|
||||
seclang_parser::symbol_type
|
||||
seclang_parser::make_SETVAR_CONTENT_PART (const std::string& v, const location_type& l)
|
||||
{
|
||||
@@ -5704,7 +5678,7 @@ namespace yy {
|
||||
|
||||
|
||||
} // yy
|
||||
#line 5708 "seclang-parser.hh" // lalr1.cc:377
|
||||
#line 5682 "seclang-parser.hh" // lalr1.cc:377
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -242,6 +242,7 @@ class Driver;
|
||||
#include "src/variables/tx.h"
|
||||
#include "src/variables/unique_id.h"
|
||||
#include "src/variables/url_encoded_error.h"
|
||||
#include "src/variables/user.h"
|
||||
#include "src/variables/user_id.h"
|
||||
#include "src/variables/variable.h"
|
||||
#include "src/variables/xml.h"
|
||||
@@ -672,8 +673,6 @@ using modsecurity::operators::Operator;
|
||||
RUN_TIME_VAR_TIME_SEC "RUN_TIME_VAR_TIME_SEC"
|
||||
RUN_TIME_VAR_TIME_WDAY "RUN_TIME_VAR_TIME_WDAY"
|
||||
RUN_TIME_VAR_TIME_YEAR "RUN_TIME_VAR_TIME_YEAR"
|
||||
SETVAR_VARIABLE_PART "SETVAR_VARIABLE_PART"
|
||||
SETVAR_CONTENT_PART "SETVAR_CONTENT_PART"
|
||||
VARIABLE "VARIABLE"
|
||||
DICT_ELEMENT "Dictionary element"
|
||||
DICT_ELEMENT_REGEXP "Dictionary element, selected by regexp"
|
||||
@@ -682,8 +681,6 @@ using modsecurity::operators::Operator;
|
||||
%type <std::unique_ptr<actions::Action>> act
|
||||
|
||||
%type <std::unique_ptr<actions::Action>> setvar_action
|
||||
%type <std::string> setvar_variable
|
||||
%type <std::string> setvar_content
|
||||
%type <std::unique_ptr<RunTimeString>> run_time_string
|
||||
|
||||
%type <std::unique_ptr<std::vector<std::unique_ptr<actions::Action> > > >
|
||||
@@ -1821,6 +1818,10 @@ var:
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::FilesTmpNames_NoDictElement());
|
||||
}
|
||||
| VARIABLE_RESOURCE run_time_string
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Resource_DynamicElement(std::move($2)));
|
||||
}
|
||||
| VARIABLE_RESOURCE DICT_ELEMENT
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Resource_DictElement($2));
|
||||
@@ -1833,7 +1834,10 @@ var:
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Resource_NoDictElement());
|
||||
}
|
||||
|
||||
| VARIABLE_IP run_time_string
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Ip_DynamicElement(std::move($2)));
|
||||
}
|
||||
| VARIABLE_IP DICT_ELEMENT
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Ip_DictElement($2));
|
||||
@@ -1846,7 +1850,10 @@ var:
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Ip_NoDictElement());
|
||||
}
|
||||
|
||||
| VARIABLE_GLOBAL run_time_string
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Global_DynamicElement(std::move($2)));
|
||||
}
|
||||
| VARIABLE_GLOBAL DICT_ELEMENT
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Global_DictElement($2));
|
||||
@@ -1859,7 +1866,26 @@ var:
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Global_NoDictElement());
|
||||
}
|
||||
|
||||
| VARIABLE_USER run_time_string
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::User_DynamicElement(std::move($2)));
|
||||
}
|
||||
| VARIABLE_USER DICT_ELEMENT
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::User_DictElement($2));
|
||||
}
|
||||
| VARIABLE_USER DICT_ELEMENT_REGEXP
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::User_DictElementRegexp($2));
|
||||
}
|
||||
| VARIABLE_USER
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::User_NoDictElement());
|
||||
}
|
||||
| VARIABLE_TX run_time_string
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Tx_DynamicElement(std::move($2)));
|
||||
}
|
||||
| VARIABLE_TX DICT_ELEMENT
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Tx_DictElement($2));
|
||||
@@ -1872,7 +1898,10 @@ var:
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Tx_NoDictElement());
|
||||
}
|
||||
|
||||
| VARIABLE_SESSION run_time_string
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Session_DynamicElement(std::move($2)));
|
||||
}
|
||||
| VARIABLE_SESSION DICT_ELEMENT
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Session_DictElement($2));
|
||||
@@ -1885,7 +1914,6 @@ var:
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::Session_NoDictElement());
|
||||
}
|
||||
|
||||
| VARIABLE_ARGS_NAMES DICT_ELEMENT
|
||||
{
|
||||
VARIABLE_CONTAINER($$, new Variables::ArgsNames_DictElement($2));
|
||||
@@ -2639,52 +2667,28 @@ act:
|
||||
;
|
||||
|
||||
setvar_action:
|
||||
NOT setvar_variable
|
||||
NOT var
|
||||
{
|
||||
ACTION_CONTAINER($$, new actions::SetVar(actions::SetVarOperation::unsetOperation, $2));
|
||||
ACTION_CONTAINER($$, new actions::SetVar(actions::SetVarOperation::unsetOperation, std::move($2)));
|
||||
}
|
||||
| setvar_variable
|
||||
| var
|
||||
{
|
||||
ACTION_CONTAINER($$, new actions::SetVar(actions::SetVarOperation::setToOneOperation, $1));
|
||||
ACTION_CONTAINER($$, new actions::SetVar(actions::SetVarOperation::setToOneOperation, std::move($1)));
|
||||
}
|
||||
| setvar_variable SETVAR_OPERATION_EQUALS setvar_content
|
||||
| var SETVAR_OPERATION_EQUALS run_time_string
|
||||
{
|
||||
ACTION_CONTAINER($$, new actions::SetVar(actions::SetVarOperation::setOperation, $1, $3));
|
||||
ACTION_CONTAINER($$, new actions::SetVar(actions::SetVarOperation::setOperation, std::move($1), std::move($3)));
|
||||
}
|
||||
| setvar_variable SETVAR_OPERATION_EQUALS_PLUS setvar_content
|
||||
| var SETVAR_OPERATION_EQUALS_PLUS run_time_string
|
||||
{
|
||||
ACTION_CONTAINER($$, new actions::SetVar(actions::SetVarOperation::sumAndSetOperation, $1, $3));
|
||||
ACTION_CONTAINER($$, new actions::SetVar(actions::SetVarOperation::sumAndSetOperation, std::move($1), std::move($3)));
|
||||
}
|
||||
| setvar_variable SETVAR_OPERATION_EQUALS_MINUS setvar_content
|
||||
| var SETVAR_OPERATION_EQUALS_MINUS run_time_string
|
||||
{
|
||||
ACTION_CONTAINER($$, new actions::SetVar(actions::SetVarOperation::substractAndSetOperation, $1, $3));
|
||||
ACTION_CONTAINER($$, new actions::SetVar(actions::SetVarOperation::substractAndSetOperation, std::move($1), std::move($3)));
|
||||
}
|
||||
;
|
||||
|
||||
setvar_variable:
|
||||
SETVAR_VARIABLE_PART
|
||||
{
|
||||
$$ = $1;
|
||||
}
|
||||
|
|
||||
SETVAR_VARIABLE_PART setvar_variable
|
||||
{
|
||||
$$ = $1 + $2;
|
||||
}
|
||||
;
|
||||
|
||||
setvar_content:
|
||||
SETVAR_CONTENT_PART
|
||||
{
|
||||
$$ = $1;
|
||||
}
|
||||
|
|
||||
SETVAR_CONTENT_PART setvar_content
|
||||
{
|
||||
$$ = $1 + $2;
|
||||
}
|
||||
;
|
||||
|
||||
run_time_string:
|
||||
run_time_string FREE_TEXT_QUOTE_MACRO_EXPANSION
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -24,10 +24,51 @@ static std::stack<int> YY_PREVIOUS_STATE;
|
||||
# undef yywrap
|
||||
# define yywrap() 1
|
||||
|
||||
#define BEGINX(z) { YY_PREVIOUS_STATE.push(YY_START); BEGIN(z); }
|
||||
#define BEGINX(z) { \
|
||||
YY_PREVIOUS_STATE.push(YY_START); \
|
||||
BEGIN(z); \
|
||||
}
|
||||
|
||||
#define BEGINX_() { \
|
||||
YY_PREVIOUS_STATE.push(YY_START); \
|
||||
if (YY_START == SETVAR_ACTION_NONQUOTED) { \
|
||||
BEGIN(EXPECTING_VAR_PARAMETER_OR_MACRO_NONQUOTED); \
|
||||
} else if (YY_START == SETVAR_ACTION_QUOTED) { \
|
||||
BEGIN(EXPECTING_VAR_PARAMETER_OR_MACRO_QUOTED); \
|
||||
} else { \
|
||||
BEGIN(EXPECTING_VAR_PARAMETER); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define BEGIN_PARAMETER() { if (YY_START == EXPECTING_OPERATOR_ENDS_WITH_SPACE) { BEGIN(TRANSITION_FROM_OP_TO_EXPECTING_PARAMETER_ENDS_WITH_SPACE); } else { BEGIN(TRANSITION_FROM_OP_TO_EXPECTING_PARAMETER_ENDS_WITH_QUOTE); } }
|
||||
#define BEGIN_NO_OP_INFORMED() { if (YY_START == EXPECTING_OPERATOR_ENDS_WITH_SPACE) { BEGIN(NO_OP_INFORMED_ENDS_WITH_SPACE); } else { BEGIN(NO_OP_INFORMED_ENDS_WITH_QUOTE); } }
|
||||
|
||||
#define BEGIN_ACTION_OPERATION() { \
|
||||
if (YY_START == SETVAR_ACTION_NONQUOTED) { \
|
||||
BEGIN(SETVAR_ACTION_NONQUOTED_WAITING_OPERATION); \
|
||||
} else if (YY_START == SETVAR_ACTION_QUOTED) { \
|
||||
BEGIN(SETVAR_ACTION_QUOTED_WAITING_OPERATION); \
|
||||
} else if (YY_START == SETVAR_ACTION_NONQUOTED_WAITING_COLLECTION_ELEM) { \
|
||||
BEGIN(SETVAR_ACTION_NONQUOTED_WAITING_OPERATION); \
|
||||
} else if (YY_START == SETVAR_ACTION_QUOTED_WAITING_COLLECTION_ELEM) { \
|
||||
BEGIN(SETVAR_ACTION_QUOTED_WAITING_OPERATION); \
|
||||
}\
|
||||
}
|
||||
|
||||
|
||||
#define BEGIN_ACTION_WAITING_CONTENT() { \
|
||||
if (YY_START == SETVAR_ACTION_NONQUOTED_WAITING_OPERATION) { \
|
||||
BEGIN(SETVAR_ACTION_NONQUOTED_WAITING_CONTENT); \
|
||||
} else if (YY_START == SETVAR_ACTION_QUOTED_WAITING_OPERATION) { \
|
||||
BEGIN(SETVAR_ACTION_QUOTED_WAITING_CONTENT); \
|
||||
} else if (YY_START == EXPECTING_VAR_PARAMETER_OR_MACRO_QUOTED) { \
|
||||
BEGIN(SETVAR_ACTION_QUOTED_WAITING_CONTENT); \
|
||||
} else if (YY_START == EXPECTING_VAR_PARAMETER_OR_MACRO_NONQUOTED) { \
|
||||
BEGIN(SETVAR_ACTION_NONQUOTED_WAITING_CONTENT); \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
#define BEGIN_PREVIOUS() { BEGIN(YY_PREVIOUS_STATE.top()); YY_PREVIOUS_STATE.pop(); }
|
||||
|
||||
// The location of the current token.
|
||||
@@ -340,9 +381,10 @@ CONGIG_DIR_SEC_COOKIE_FORMAT (?i:SecCookieFormat)
|
||||
CONGIG_DIR_SEC_DATA_DIR (?i:SecDataDir)
|
||||
CONGIG_DIR_SEC_STATUS_ENGINE (?i:SecStatusEngine)
|
||||
CONGIG_DIR_SEC_TMP_DIR (?i:SecTmpDir)
|
||||
DICT_ELEMENT ([^\"|,\n \t}]|([^\\]\\\"))+
|
||||
DICT_ELEMENT_WITH_PIPE [^ \t"]+
|
||||
DICT_ELEMENT_NO_PIPE [^ \|\t"]+
|
||||
DICT_ELEMENT ([^\"|,\n \t}=]|([^\\]\\\"))+
|
||||
DICT_ELEMENT_WITH_PIPE [^ =\t"]+
|
||||
DICT_ELEMENT_NO_PIPE [^ =\|\t"]+
|
||||
DICT_ELEMENT_NO_MACRO ([^\"|,%{\n \t}=]|([^\\]\\\"))+
|
||||
|
||||
DICT_ELEMENT_TWO [^\"\=, \t\r\n\\]*
|
||||
DICT_ELEMENT_TWO_QUOTED [^\"\'\=\r\n\\]*
|
||||
@@ -356,6 +398,7 @@ DOUBLE_QUOTE_BUT_SCAPED (")
|
||||
COMMA_BUT_SCAPED (,)
|
||||
FREE_TEXT_QUOTE_MACRO_EXPANSION (([^%'])|([^\\][\\][%][{])|([^\\]([\\][\\])+[\\][%][{])|[^\\][\\][']|[^\\]([\\][\\])+[\\]['])+
|
||||
FREE_TEXT_DOUBLE_QUOTE_MACRO_EXPANSION ((([^"%])|([%][^{]))|([^\\][\\][%][{])|([^\\]([\\][\\])+[\\][%][{])|[^\\][\\]["]|[^\\]([\\][\\])+[\\]["])+
|
||||
FREE_TEXT_EQUALS_MACRO_EXPANSION ((([^",=%])|([%][^{]))|([^\\][\\][%][{])|([^\\]([\\][\\])+[\\][%][{])|[^\\][\\][=]|[^\\]([\\][\\])+[\\][=])+
|
||||
FREE_TEXT_COMMA_MACRO_EXPANSION (([^%,])|([^\\][\\][%][{])|([^\\]([\\][\\])+[\\][%][{])|[^\\][\\][,]|[^\\]([\\][\\])+[\\][,])+
|
||||
FREE_TEXT_COMMA_DOUBLE_QUOTE_MACRO_EXPANSION ((([^,"%])|([%][^{]))|([^\\][\\][%][{])|([^\\]([\\][\\])+[\\][%][{])|[^\\][\\]["]|[^\\]([\\][\\])+[\\]["])+
|
||||
|
||||
@@ -391,7 +434,7 @@ EQUALS_MINUS (?i:=\-)
|
||||
%x EXPECTING_ACTION_PREDICATE ACTION_PREDICATE_ENDS_WITH_QUOTE ACTION_PREDICATE_ENDS_WITH_DOUBLE_QUOTE ACTION_PREDICATE_ENDS_WITH_COMMA_OR_DOUBLE_QUOTE
|
||||
%x COMMENT
|
||||
%x TRANSITION_FROM_OP_TO_EXPECTING_PARAMETER_ENDS_WITH_QUOTE TRANSITION_FROM_OP_TO_EXPECTING_PARAMETER_ENDS_WITH_SPACE
|
||||
%x EXPECTING_VAR_PARAMETER
|
||||
%x EXPECTING_VAR_PARAMETER EXPECTING_VAR_PARAMETER_OR_MACRO_NONQUOTED EXPECTING_VAR_PARAMETER_OR_MACRO_QUOTED
|
||||
%x EXPECTING_PARAMETER_ENDS_WITH_QUOTE EXPECTING_PARAMETER_ENDS_WITH_SPACE
|
||||
%x EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE EXPECTING_ACTIONS_ONLY_ONE
|
||||
%x TRANSACTION_FROM_OPERATOR_TO_ACTIONS
|
||||
@@ -601,61 +644,52 @@ EQUALS_MINUS (?i:=\-)
|
||||
. { BEGIN(LEXING_ERROR_VARIABLE); yyless(0); }
|
||||
}
|
||||
|
||||
<SETVAR_ACTION_NONQUOTED>{
|
||||
<SETVAR_ACTION_NONQUOTED,SETVAR_ACTION_QUOTED>{
|
||||
{NOT} { return p::make_NOT(*driver.loc.back()); }
|
||||
{VARIABLE_TX}|{VARIABLE_SESSION}|{VARIABLE_RESOURCE}|{VARIABLE_IP}|{VARIABLE_USER}|{VARIABLE_GLOBAL}[:\.] { BEGIN(SETVAR_ACTION_NONQUOTED_WAITING_COLLECTION_ELEM); return p::make_SETVAR_VARIABLE_PART(yytext, *driver.loc.back());}
|
||||
{VARIABLE_TX}|{VARIABLE_SESSION}|{VARIABLE_RESOURCE}|{VARIABLE_IP}|{VARIABLE_USER}|{VARIABLE_GLOBAL} { BEGIN(SETVAR_ACTION_NONQUOTED_WAITING_OPERATION); return p::make_SETVAR_VARIABLE_PART(yytext, *driver.loc.back());}
|
||||
.|\n { BEGIN(LEXING_ERROR_ACTION); yyless(0); }
|
||||
.|\n { BEGIN_ACTION_OPERATION(); yyless(0); }
|
||||
}
|
||||
|
||||
<SETVAR_ACTION_NONQUOTED_WAITING_COLLECTION_ELEM>{
|
||||
{DICT_ELEMENT_TWO} { return p::make_SETVAR_VARIABLE_PART(yytext, *driver.loc.back()); }
|
||||
\\(.|\n) { return p::make_SETVAR_VARIABLE_PART(yytext + 1, *driver.loc.back()); }
|
||||
.|\n { BEGIN(SETVAR_ACTION_NONQUOTED_WAITING_OPERATION); yyless(0); }
|
||||
|
||||
<SETVAR_ACTION_NONQUOTED_WAITING_OPERATION,SETVAR_ACTION_QUOTED_WAITING_OPERATION>{
|
||||
{EQUALS_PLUS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); }
|
||||
{EQUALS_MINUS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); }
|
||||
{EQUALS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); }
|
||||
}
|
||||
|
||||
<SETVAR_ACTION_NONQUOTED_WAITING_OPERATION>{
|
||||
{EQUALS_PLUS} { BEGIN(SETVAR_ACTION_NONQUOTED_WAITING_CONTENT); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); }
|
||||
{EQUALS_MINUS} { BEGIN(SETVAR_ACTION_NONQUOTED_WAITING_CONTENT); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); }
|
||||
{EQUALS} { BEGIN(SETVAR_ACTION_NONQUOTED_WAITING_CONTENT); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); }
|
||||
.|\n { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(0);}
|
||||
}
|
||||
|
||||
<SETVAR_ACTION_NONQUOTED_WAITING_CONTENT>{
|
||||
\\(.|\n) { return p::make_SETVAR_CONTENT_PART(yytext + 1, *driver.loc.back()); }
|
||||
[^,"\n\r\t \\]+ { return p::make_SETVAR_CONTENT_PART(yytext, *driver.loc.back()); }
|
||||
.|\n { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(0); }
|
||||
}
|
||||
|
||||
<SETVAR_ACTION_QUOTED>{
|
||||
{NOT} { return p::make_NOT(*driver.loc.back()); }
|
||||
{VARIABLE_TX}|{VARIABLE_SESSION}|{VARIABLE_RESOURCE}|{VARIABLE_IP}|{VARIABLE_USER}|{VARIABLE_GLOBAL}[:\.] { BEGIN(SETVAR_ACTION_QUOTED_WAITING_COLLECTION_ELEM); return p::make_SETVAR_VARIABLE_PART(yytext, *driver.loc.back());}
|
||||
{VARIABLE_TX}|{VARIABLE_SESSION}|{VARIABLE_RESOURCE}|{VARIABLE_IP}|{VARIABLE_USER}|{VARIABLE_GLOBAL} { BEGIN(SETVAR_ACTION_QUOTED_WAITING_OPERATION); return p::make_SETVAR_VARIABLE_PART(yytext, *driver.loc.back());}
|
||||
.|\n { BEGIN(LEXING_ERROR_ACTION); yyless(0); }
|
||||
}
|
||||
|
||||
<SETVAR_ACTION_QUOTED_WAITING_COLLECTION_ELEM>{
|
||||
{DICT_ELEMENT_TWO_QUOTED} { return p::make_SETVAR_VARIABLE_PART(yytext, *driver.loc.back()); }
|
||||
\\(.|\n) { return p::make_SETVAR_VARIABLE_PART(yytext + 1, *driver.loc.back()); }
|
||||
.|\n { BEGIN(SETVAR_ACTION_QUOTED_WAITING_OPERATION); yyless(0); }
|
||||
}
|
||||
|
||||
<SETVAR_ACTION_QUOTED_WAITING_OPERATION>{
|
||||
{EQUALS_PLUS} { BEGIN(SETVAR_ACTION_QUOTED_WAITING_CONTENT); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); }
|
||||
{EQUALS_MINUS} { BEGIN(SETVAR_ACTION_QUOTED_WAITING_CONTENT); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); }
|
||||
{EQUALS} { BEGIN(SETVAR_ACTION_QUOTED_WAITING_CONTENT); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); }
|
||||
\' { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); }
|
||||
.|\n { BEGIN(LEXING_ERROR_ACTION); yyless(0); }
|
||||
}
|
||||
|
||||
<SETVAR_ACTION_QUOTED_WAITING_CONTENT>{
|
||||
\\(.|\n) { return p::make_SETVAR_CONTENT_PART(yytext + 1, *driver.loc.back()); }
|
||||
[^"\'\n\r\\]* { return p::make_SETVAR_CONTENT_PART(yytext, *driver.loc.back()); }
|
||||
\' { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); }
|
||||
.|\n { BEGIN(LEXING_ERROR_ACTION); yyless(0); }
|
||||
|
||||
|
||||
|
||||
|
||||
<SETVAR_ACTION_NONQUOTED_WAITING_CONTENT,SETVAR_ACTION_QUOTED_WAITING_CONTENT>{
|
||||
{START_MACRO_VARIABLE} { BEGINX(EXPECTING_ACTION_PREDICATE_VARIABLE); }
|
||||
}
|
||||
|
||||
|
||||
<SETVAR_ACTION_NONQUOTED_WAITING_CONTENT>{
|
||||
{FREE_TEXT_EQUALS_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); }
|
||||
.|\n { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(0); }
|
||||
}
|
||||
|
||||
|
||||
<SETVAR_ACTION_QUOTED_WAITING_CONTENT>{
|
||||
{FREE_TEXT_EQUALS_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); }
|
||||
\' { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); }
|
||||
.|\n { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(0); }
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<FINISH_ACTIONS>{
|
||||
<<EOF>> { BEGIN(INITIAL); yyless(0); p::make_NEW_LINE(*driver.loc.back()); }
|
||||
. { BEGIN(INITIAL); }
|
||||
@@ -769,9 +803,9 @@ p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1),
|
||||
}
|
||||
|
||||
<EXPECTING_VARIABLE>{
|
||||
[|] { return p::make_PIPE(*driver.loc.back()); }
|
||||
[,] { return p::make_PIPE(*driver.loc.back()); }
|
||||
["] { return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); }
|
||||
[|] { return p::make_PIPE(*driver.loc.back()); }
|
||||
[,] { return p::make_PIPE(*driver.loc.back()); }
|
||||
["] { return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); }
|
||||
{VAR_EXCLUSION} { return p::make_VAR_EXCLUSION(*driver.loc.back()); }
|
||||
{VAR_COUNT} { return p::make_VAR_COUNT(*driver.loc.back()); }
|
||||
}
|
||||
@@ -850,7 +884,6 @@ p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1),
|
||||
{VARIABLE_REQUEST_PROTOCOL} { return p::make_VARIABLE_REQUEST_PROTOCOL(*driver.loc.back()); }
|
||||
{VARIABLE_REQUEST_URI_RAW} { return p::make_VARIABLE_REQUEST_URI_RAW(*driver.loc.back()); }
|
||||
{VARIABLE_REQUEST_URI} { return p::make_VARIABLE_REQUEST_URI(*driver.loc.back()); }
|
||||
{VARIABLE_RESOURCE} { return p::make_VARIABLE_RESOURCE(*driver.loc.back()); }
|
||||
{VARIABLE_RESPONSE_BODY} { return p::make_VARIABLE_RESPONSE_BODY(*driver.loc.back()); }
|
||||
{VARIABLE_RESPONSE_CONTENT_LENGTH} { return p::make_VARIABLE_RESPONSE_CONTENT_LENGTH(*driver.loc.back()); }
|
||||
{VARIABLE_RESPONSE_CONTENT_TYPE} { return p::make_VARIABLE_RESPONSE_CONTENT_TYPE(*driver.loc.back()); }
|
||||
@@ -902,21 +935,6 @@ p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1),
|
||||
{RUN_TIME_VAR_XML}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_XML(*driver.loc.back()); }
|
||||
{RUN_TIME_VAR_ENV} { return p::make_RUN_TIME_VAR_ENV(*driver.loc.back()); }
|
||||
{RUN_TIME_VAR_ENV}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_ENV(*driver.loc.back()); }
|
||||
|
||||
|
||||
{VARIABLE_IP} { return p::make_VARIABLE_IP(*driver.loc.back()); }
|
||||
{VARIABLE_IP}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_IP(*driver.loc.back()); }
|
||||
{VARIABLE_RESOURCE} { return p::make_VARIABLE_RESOURCE(*driver.loc.back()); }
|
||||
{VARIABLE_RESOURCE}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RESOURCE(*driver.loc.back()); }
|
||||
{VARIABLE_GLOBAL} { return p::make_VARIABLE_GLOBAL(*driver.loc.back()); }
|
||||
{VARIABLE_GLOBAL}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_GLOBAL(*driver.loc.back()); }
|
||||
{VARIABLE_SESSION} { return p::make_VARIABLE_SESSION(*driver.loc.back()); }
|
||||
{VARIABLE_SESSION}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_SESSION(*driver.loc.back()); }
|
||||
{VARIABLE_USER} { return p::make_VARIABLE_USER(*driver.loc.back()); }
|
||||
{VARIABLE_USER}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_USER(*driver.loc.back()); }
|
||||
{VARIABLE_TX} { return p::make_VARIABLE_TX(*driver.loc.back()); }
|
||||
{VARIABLE_TX}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_TX(*driver.loc.back()); }
|
||||
|
||||
{RUN_TIME_VAR_BLD} { return p::make_RUN_TIME_VAR_BLD(yytext, *driver.loc.back()); }
|
||||
{RUN_TIME_VAR_DUR} { return p::make_RUN_TIME_VAR_DUR(yytext, *driver.loc.back()); }
|
||||
{RUN_TIME_VAR_HSV} { return p::make_RUN_TIME_VAR_HSV(yytext, *driver.loc.back()); }
|
||||
@@ -933,15 +951,48 @@ p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1),
|
||||
|
||||
|
||||
{VARIABLE_WEBSERVER_ERROR_LOG} { driver.error (*driver.loc.back(), "Variable VARIABLE_WEBSERVER_ERROR_LOG is not supported by libModSecurity", ""); throw p::syntax_error(*driver.loc.back(), "");}
|
||||
{VARIABLE_GLOBAL} { return p::make_VARIABLE_GLOBAL(*driver.loc.back()); }
|
||||
{VARIABLE_IP} { return p::make_VARIABLE_IP(*driver.loc.back()); }
|
||||
{VARIABLE_RESOURCE} { return p::make_VARIABLE_RESOURCE(*driver.loc.back()); }
|
||||
{VARIABLE_SESSION} { return p::make_VARIABLE_SESSION(*driver.loc.back()); }
|
||||
{VARIABLE_STATUS} { return p::make_VARIABLE_STATUS(*driver.loc.back()); }
|
||||
{VARIABLE_TX} { return p::make_VARIABLE_TX(*driver.loc.back()); }
|
||||
{VARIABLE_USER} { return p::make_VARIABLE_USER(*driver.loc.back()); }
|
||||
}
|
||||
|
||||
<EXPECTING_VARIABLE,EXPECTING_ACTION_PREDICATE_VARIABLE,SETVAR_ACTION_NONQUOTED,SETVAR_ACTION_QUOTED>{
|
||||
{VARIABLE_GLOBAL}[:.] { BEGINX_(); return p::make_VARIABLE_GLOBAL(*driver.loc.back()); }
|
||||
{VARIABLE_IP}[:.] { BEGINX_(); return p::make_VARIABLE_IP(*driver.loc.back()); }
|
||||
{VARIABLE_RESOURCE}[:.] { BEGINX_(); return p::make_VARIABLE_RESOURCE(*driver.loc.back()); }
|
||||
{VARIABLE_SESSION}[:.] { BEGINX_(); return p::make_VARIABLE_SESSION(*driver.loc.back()); }
|
||||
{VARIABLE_TX}[:.] { BEGINX_(); return p::make_VARIABLE_TX(*driver.loc.back()); }
|
||||
{VARIABLE_USER}[:.] { BEGINX_(); return p::make_VARIABLE_USER(*driver.loc.back()); }
|
||||
}
|
||||
|
||||
|
||||
<EXPECTING_VAR_PARAMETER_OR_MACRO_QUOTED,EXPECTING_VAR_PARAMETER_OR_MACRO_NONQUOTED>{
|
||||
{EQUALS_PLUS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); }
|
||||
{EQUALS_MINUS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); }
|
||||
{EQUALS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); }
|
||||
[\/]{DICT_ELEMENT_NO_PIPE}[\/][ ] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); }
|
||||
[\/]{DICT_ELEMENT_NO_PIPE}[\/][|] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); }
|
||||
['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['] { BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); }
|
||||
['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['][|] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); }
|
||||
{FREE_TEXT_EQUALS_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); }
|
||||
|
||||
[\/]{DICT_ELEMENT_NO_PIPE}[\/][,] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); }
|
||||
['][\/]{DICT_ELEMENT_NO_PIPE}[\/]['][,] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); }
|
||||
["] { BEGIN_PREVIOUS(); yyless(0); }
|
||||
[,] { BEGIN_PREVIOUS(); yyless(0); }
|
||||
. { BEGINX(LEXING_ERROR_ACTION); yyless(0); }
|
||||
}
|
||||
|
||||
|
||||
<EXPECTING_VAR_PARAMETER>{
|
||||
[\/]{DICT_ELEMENT_NO_PIPE}[\/][ ] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); }
|
||||
[\/]{DICT_ELEMENT_NO_PIPE}[\/][|] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); }
|
||||
['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['] { BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); }
|
||||
['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['][|] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); }
|
||||
['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['] { BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); }
|
||||
['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['][|] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); }
|
||||
{DICT_ELEMENT} { BEGIN_PREVIOUS(); return p::make_DICT_ELEMENT(yytext, *driver.loc.back()); }
|
||||
|
||||
[\/]{DICT_ELEMENT_NO_PIPE}[\/][,] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); }
|
||||
@@ -951,6 +1002,8 @@ p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1),
|
||||
["] { return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); }
|
||||
}
|
||||
|
||||
|
||||
|
||||
<EXPECTING_OPERATOR_ENDS_WITH_SPACE>{
|
||||
{OPERATOR_GEOLOOKUP}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_GEOLOOKUP(*driver.loc.back()); }
|
||||
{OPERATOR_UNCONDITIONAL_MATCH}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_UNCONDITIONAL_MATCH(*driver.loc.back()); }
|
||||
@@ -1026,18 +1079,17 @@ p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1),
|
||||
. { BEGIN(LEXING_ERROR); yyless(0); }
|
||||
}
|
||||
|
||||
|
||||
<EXPECTING_PARAMETER_ENDS_WITH_QUOTE>{
|
||||
["] { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); }
|
||||
{FREE_TEXT_DOUBLE_QUOTE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); }
|
||||
}
|
||||
|
||||
<EXPECTING_PARAMETER_ENDS_WITH_SPACE>{
|
||||
[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); }
|
||||
{FREE_TEXT_SPACE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); }
|
||||
[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); }
|
||||
{FREE_TEXT_SPACE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); }
|
||||
}
|
||||
|
||||
<EXPECTING_PARAMETER_ENDS_WITH_QUOTE,EXPECTING_PARAMETER_ENDS_WITH_SPACE>{
|
||||
<EXPECTING_PARAMETER_ENDS_WITH_QUOTE,EXPECTING_PARAMETER_ENDS_WITH_SPACE,EXPECTING_VAR_PARAMETER_OR_MACRO_QUOTED,EXPECTING_VAR_PARAMETER_OR_MACRO_NONQUOTED>{
|
||||
{START_MACRO_VARIABLE} { BEGINX(EXPECTING_ACTION_PREDICATE_VARIABLE); }
|
||||
. { BEGIN(LEXING_ERROR_VARIABLE); yyless(0); }
|
||||
}
|
||||
@@ -1060,7 +1112,7 @@ p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1),
|
||||
}
|
||||
|
||||
|
||||
<INITIAL,EXPECTING_OPERATOR_ENDS_WITH_SPACE,EXPECTING_OPERATOR_ENDS_WITH_QUOTE>{
|
||||
<INITIAL,EXPECTING_OPERATOR_ENDS_WITH_SPACE,EXPECTING_OPERATOR_ENDS_WITH_QUOTE,EXPECTING_VAR_PARAMETER_OR_MACRO_QUOTED,EXPECTING_VAR_PARAMETER_OR_MACRO_NONQUOTED>{
|
||||
[ \t]+ { }
|
||||
[ \t]*\\\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); }
|
||||
[ \t]*\\\r\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); }
|
||||
|
||||
Reference in New Issue
Block a user