diff --git a/askama_parser/src/expr.rs b/askama_parser/src/expr.rs index 3e63d9306..7f822668b 100644 --- a/askama_parser/src/expr.rs +++ b/askama_parser/src/expr.rs @@ -254,7 +254,7 @@ impl<'a> Suffix<'a> { let mut in_str = false; let mut escaped = false; - for (i, c) in input.chars().enumerate() { + for (i, c) in input.char_indices() { if !(c == '(' || c == ')') || !in_str { match c { '(' => nested += 1, diff --git a/askama_parser/src/tests.rs b/askama_parser/src/tests.rs index ce300d36a..c23d13f69 100644 --- a/askama_parser/src/tests.rs +++ b/askama_parser/src/tests.rs @@ -788,3 +788,10 @@ fn test_parse_array() { )], ); } + +#[test] +fn fuzzed_unicode_slice() { + let d = "{eeuuu{b&{!!&{!!11{{ + 0!(!1q҄א!)!!!!!!n!"; + assert!(Ast::from_str(d, &Syntax::default()).is_err()); +}