parser: reject excessively long syntax delimiters

This commit is contained in:
René Kijewski 2024-11-10 06:34:50 +01:00
parent f8bb54bd96
commit 9c53dcf7ff
2 changed files with 11 additions and 0 deletions

View File

@ -801,6 +801,14 @@ impl<'a> SyntaxBuilder<'a> {
"delimiters must be at least two characters long. \
The {k} delimiter ({s:?}) is too short",
));
} else if s.len() > 32 {
return Err(format!(
"delimiters must be at most 32 characters long. \
The {k} delimiter ({:?}...) is too long",
&s[..(16..=s.len())
.find(|&i| s.is_char_boundary(i))
.unwrap_or(s.len())],
));
} else if s.chars().any(char::is_whitespace) {
return Err(format!(
"delimiters may not contain white spaces. \

View File

@ -1066,6 +1066,9 @@ fn fuzzed_filter_recursion() {
}
#[test]
#[should_panic = "called `Result::unwrap()` on an `Err` value: \
\"delimiters must be at most 32 characters long. The closing block delimiter \
(\\\"\\\\0]***NEWFILE\\\\u{1f}***\\\"...) is too long\""]
fn fuzzed_excessive_syntax_lengths() {
let syntax = SyntaxBuilder {
name: "test",