diff --git a/askama_parser/src/expr.rs b/askama_parser/src/expr.rs index 3ebc4ba3..50e719b2 100644 --- a/askama_parser/src/expr.rs +++ b/askama_parser/src/expr.rs @@ -1029,7 +1029,7 @@ impl<'a: 'l, 'l> Suffix<'a> { // raw string string or identifier "r" => None, // a simple identifier - _ if hashes == 0 => return Ok(()), + _ if hashes == 0 && quot.is_none() => return Ok(()), // reserved prefix: reject _ => { return cut_error!( diff --git a/askama_parser/src/tests.rs b/askama_parser/src/tests.rs index e6facca0..1a42a125 100644 --- a/askama_parser/src/tests.rs +++ b/askama_parser/src/tests.rs @@ -1710,3 +1710,17 @@ fn regression_tests_span_change() { ))] ); } + +#[test] +fn test_unclosed_prefixed_string() { + // Regression test for . + let syntax = Syntax::default(); + for test in ["{{ x!(i\") }}", "{{ x!(i\"\") }}"] { + assert!( + Ast::from_str(test, None, &syntax) + .unwrap_err() + .to_string() + .contains("reserved prefix `i#`") + ); + } +} diff --git a/fuzzing/fuzz/artifacts/derive/clusterfuzz-testcase-minimized-derive-4654117948817408 b/fuzzing/fuzz/artifacts/derive/clusterfuzz-testcase-minimized-derive-4654117948817408 new file mode 100644 index 00000000..90707d42 Binary files /dev/null and b/fuzzing/fuzz/artifacts/derive/clusterfuzz-testcase-minimized-derive-4654117948817408 differ