Skip to content

Commit 676479c

Browse files
authored
Merge pull request #70 from coreruleset/chore/validate-byte-range-op
refactor: validate byte range operator
2 parents 43b9320 + 1d4c2b8 commit 676479c

13 files changed

+6943
-6533
lines changed

g4/SecLangLexer.g4

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,7 @@ OPERATOR_UNCONDITIONAL_MATCH
630630
;
631631

632632
OPERATOR_VALIDATE_BYTE_RANGE
633-
: 'validateByteRange'
633+
: 'validateByteRange' -> pushMode(REMOVE_SPACE_MODE)
634634
;
635635

636636
OPERATOR_VALIDATE_DTD
@@ -1393,4 +1393,32 @@ HASH_COMMENT_BLOCK
13931393
13941394
BLOCK_COMMENT_END
13951395
: '\r'? '\n' '\r'? '\n' -> popMode
1396+
;
1397+
1398+
mode REMOVE_SPACE_MODE;
1399+
1400+
WS_REMOVE_SPACE
1401+
: ' ' -> skip, pushMode(INT_RANGE_MODE)
1402+
;
1403+
1404+
mode INT_RANGE_MODE;
1405+
1406+
INT_RANGE_VALUE
1407+
: DIGIT+
1408+
;
1409+
1410+
MINUS_INT_RANGE
1411+
: '-'
1412+
;
1413+
1414+
WS_INT_RANGE
1415+
: ' '+
1416+
;
1417+
1418+
QUOTE_INT_RANGE
1419+
: '"' -> type(QUOTE), pushMode(DEFAULT_MODE)
1420+
;
1421+
1422+
COMMA_INT_RANGE
1423+
: ',' -> type(COMMA)
13961424
;

g4/SecLangParser.g4

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@ remove_rule_by_id_values:
138138
| int_range # remove_rule_by_id_int_range
139139
;
140140

141+
operator_int_range:
142+
INT_RANGE_VALUE MINUS_INT_RANGE INT_RANGE_VALUE
143+
;
144+
141145
int_range:
142146
range_start MINUS range_end
143147
;
@@ -305,7 +309,7 @@ operator_name:
305309
operator_value:
306310
variable_enum
307311
| STRING
308-
| (INT | int_range) (COMMA (INT | int_range))*
312+
| WS_INT_RANGE* (INT_RANGE_VALUE | operator_int_range) (COMMA WS_INT_RANGE* (INT_RANGE_VALUE | operator_int_range))*
309313
| OPERATOR_UNQUOTED_STRING
310314
| OPERATOR_QUOTED_STRING
311315
;

listener.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,20 @@ func (l *TreeShapeListener) EnterRange_end(ctx *parser.Range_endContext) {
8686
l.results.RangeEndEvents = append(l.results.RangeEndEvents, i)
8787
}
8888

89+
func (l *TreeShapeListener) EnterOperator_int_range(ctx *parser.Operator_int_rangeContext) {
90+
l.results.RangeEvents = append(l.results.RangeEvents, ctx.GetText())
91+
i, err := strconv.Atoi(ctx.INT_RANGE_VALUE(0).GetText())
92+
if err != nil {
93+
panic(err)
94+
}
95+
l.results.RangeStartEvents = append(l.results.RangeStartEvents, i)
96+
i, err = strconv.Atoi(ctx.INT_RANGE_VALUE(1).GetText())
97+
if err != nil {
98+
panic(err)
99+
}
100+
l.results.RangeEndEvents = append(l.results.RangeEndEvents, i)
101+
}
102+
89103
func (l *TreeShapeListener) EnterRemove_rule_by_id(ctx *parser.Remove_rule_by_idContext) {
90104
l.results.DirectiveList = append(l.results.DirectiveList, ctx.GetText())
91105
}

parser/seclang_lexer.go

Lines changed: 2664 additions & 2635 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/seclang_parser.go

Lines changed: 1025 additions & 831 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/seclangparser_base_listener.go

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/seclangparser_listener.go

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/seclang_parser/SecLangLexer.py

Lines changed: 2319 additions & 2293 deletions
Large diffs are not rendered by default.

src/seclang_parser/SecLangParser.py

Lines changed: 859 additions & 770 deletions
Large diffs are not rendered by default.

src/seclang_parser/SecLangParserListener.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,15 @@ def exitRemove_rule_by_id_int_range(self, ctx:SecLangParser.Remove_rule_by_id_in
134134
pass
135135

136136

137+
# Enter a parse tree produced by SecLangParser#operator_int_range.
138+
def enterOperator_int_range(self, ctx:SecLangParser.Operator_int_rangeContext):
139+
pass
140+
141+
# Exit a parse tree produced by SecLangParser#operator_int_range.
142+
def exitOperator_int_range(self, ctx:SecLangParser.Operator_int_rangeContext):
143+
pass
144+
145+
137146
# Enter a parse tree produced by SecLangParser#int_range.
138147
def enterInt_range(self, ctx:SecLangParser.Int_rangeContext):
139148
pass

0 commit comments

Comments
 (0)