Skip to content

Commit 10b13f1

Browse files
committed
Build regex using parser settings instead of full filter parser
1 parent ca9a4a2 commit 10b13f1

File tree

3 files changed

+24
-22
lines changed

3 files changed

+24
-22
lines changed

engine/src/ast/field_expr.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2646,9 +2646,9 @@ mod tests {
26462646

26472647
// Matches operator
26482648
let parser = FilterParser::new(&SCHEME);
2649-
let r = Regex::new("a.b", RegexFormat::Literal, &parser).unwrap();
2649+
let r = Regex::new("a.b", RegexFormat::Literal, parser.settings()).unwrap();
26502650
let expr = assert_ok!(
2651-
FilterParser::new(&SCHEME).lex_as("http.host matches r###\"a.b\"###"),
2651+
parser.lex_as("http.host matches r###\"a.b\"###"),
26522652
ComparisonExpr {
26532653
lhs: IndexExpr {
26542654
identifier: IdentifierExpr::Field(field("http.host")),

engine/src/rhs_types/regex/imp_real.rs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{FilterParser, RegexFormat};
1+
use crate::{ParserSettings, RegexFormat};
22

33
pub use regex::Error;
44

@@ -14,12 +14,12 @@ impl Regex {
1414
pub fn new(
1515
pattern: &str,
1616
format: RegexFormat,
17-
parser: &FilterParser<'_>,
17+
settings: &ParserSettings,
1818
) -> Result<Self, Error> {
1919
::regex::bytes::RegexBuilder::new(pattern)
2020
.unicode(false)
21-
.size_limit(parser.settings.regex_compiled_size_limit)
22-
.dfa_size_limit(parser.settings.regex_dfa_size_limit)
21+
.size_limit(settings.regex_compiled_size_limit)
22+
.dfa_size_limit(settings.regex_dfa_size_limit)
2323
.build()
2424
.map(|r| Regex {
2525
compiled_regex: r,
@@ -51,15 +51,13 @@ impl From<Regex> for regex::bytes::Regex {
5151

5252
#[test]
5353
fn test_compiled_size_limit() {
54-
use crate::Scheme;
55-
56-
let scheme = Scheme::default();
57-
5854
const COMPILED_SIZE_LIMIT: usize = 1024 * 1024;
59-
let mut parser = FilterParser::new(&scheme);
60-
parser.regex_set_compiled_size_limit(COMPILED_SIZE_LIMIT);
55+
let settings = ParserSettings {
56+
regex_compiled_size_limit: COMPILED_SIZE_LIMIT,
57+
..Default::default()
58+
};
6159
assert_eq!(
62-
Regex::new(".{4079,65535}", RegexFormat::Literal, &parser),
60+
Regex::new(".{4079,65535}", RegexFormat::Literal, &settings),
6361
Err(Error::CompiledTooBig(COMPILED_SIZE_LIMIT))
6462
);
6563
}

engine/src/rhs_types/regex/mod.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ fn lex_regex_from_raw_string<'i>(
5252
parser: &FilterParser<'_>,
5353
) -> LexResult<'i, Regex> {
5454
let ((lexed, hashes), input) = lex_raw_string_as_str(input)?;
55-
match Regex::new(lexed, RegexFormat::Raw(hashes), parser) {
55+
match Regex::new(lexed, RegexFormat::Raw(hashes), parser.settings()) {
5656
Ok(regex) => Ok((regex, input)),
5757
Err(err) => Err((LexErrorKind::ParseRegex(err), input)),
5858
}
@@ -94,7 +94,7 @@ fn lex_regex_from_literal<'i>(input: &'i str, parser: &FilterParser<'_>) -> LexR
9494
};
9595
}
9696
};
97-
match Regex::new(&regex_buf, RegexFormat::Literal, parser) {
97+
match Regex::new(&regex_buf, RegexFormat::Literal, parser.settings()) {
9898
Ok(regex) => Ok((regex, input)),
9999
Err(err) => Err((LexErrorKind::ParseRegex(err), regex_str)),
100100
}
@@ -123,17 +123,19 @@ impl Serialize for Regex {
123123
#[cfg(test)]
124124
mod test {
125125
use super::*;
126-
use crate::Scheme;
126+
use crate::{ParserSettings, Scheme};
127127

128128
#[test]
129129
fn test() {
130130
let scheme = Scheme::new();
131+
let parser = FilterParser::new(&scheme);
132+
131133
let expr = assert_ok!(
132-
Regex::lex_with(r#""[a-z"\]]+\d{1,10}\"";"#, &FilterParser::new(&scheme)),
134+
Regex::lex_with(r#""[a-z"\]]+\d{1,10}\"";"#, &parser),
133135
Regex::new(
134136
r#"[a-z"\]]+\d{1,10}""#,
135137
RegexFormat::Literal,
136-
&FilterParser::new(&scheme)
138+
&ParserSettings::default(),
137139
)
138140
.unwrap(),
139141
";"
@@ -142,7 +144,7 @@ mod test {
142144
assert_json!(expr, r#"[a-z"\]]+\d{1,10}""#);
143145

144146
assert_err!(
145-
Regex::lex_with(r#""abcd\"#, &FilterParser::new(&scheme)),
147+
Regex::lex_with(r#""abcd\"#, &parser),
146148
LexErrorKind::MissingEndingQuote,
147149
"abcd\\"
148150
);
@@ -151,6 +153,8 @@ mod test {
151153
#[test]
152154
fn test_raw_string() {
153155
let scheme = Scheme::new();
156+
let parser = FilterParser::new(&scheme);
157+
154158
let expr = assert_ok!(
155159
Regex::lex_with(
156160
r###"r#"[a-z"\]]+\d{1,10}""#;"###,
@@ -159,7 +163,7 @@ mod test {
159163
Regex::new(
160164
r#"[a-z"\]]+\d{1,10}""#,
161165
RegexFormat::Raw(1),
162-
&FilterParser::new(&scheme)
166+
parser.settings(),
163167
)
164168
.unwrap(),
165169
";"
@@ -170,12 +174,12 @@ mod test {
170174
let expr = assert_ok!(
171175
Regex::lex_with(
172176
r##"r#"(?u)\*\a\f\t\n\r\v\x7F\x{10FFFF}\u007F\u{7F}\U0000007F\U{7F}"#"##,
173-
&FilterParser::new(&scheme)
177+
&parser,
174178
),
175179
Regex::new(
176180
r#"(?u)\*\a\f\t\n\r\v\x7F\x{10FFFF}\u007F\u{7F}\U0000007F\U{7F}"#,
177181
RegexFormat::Raw(1),
178-
&FilterParser::new(&scheme)
182+
parser.settings(),
179183
)
180184
.unwrap(),
181185
""

0 commit comments

Comments
 (0)