aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--askama_parser/src/expr.rs2
-rw-r--r--askama_parser/src/tests.rs7
2 files changed, 8 insertions, 1 deletions
diff --git a/askama_parser/src/expr.rs b/askama_parser/src/expr.rs
index 3e63d93..7f82266 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 ce300d3..c23d13f 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());
+}