From 238e4bbad7712ccc3a3ea4a5b09c63bd147c692e Mon Sep 17 00:00:00 2001 From: René Kijewski Date: Thu, 28 Sep 2023 17:09:29 +0200 Subject: Limit nesting in parser nodes, too --- askama_parser/src/lib.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'askama_parser/src/lib.rs') diff --git a/askama_parser/src/lib.rs b/askama_parser/src/lib.rs index de88a20..3428735 100644 --- a/askama_parser/src/lib.rs +++ b/askama_parser/src/lib.rs @@ -255,6 +255,7 @@ fn path_or_identifier(i: &str) -> IResult<&str, PathOrIdentifier<'_>> { struct State<'a> { syntax: &'a Syntax<'a>, loop_depth: Cell, + level: Cell, } impl<'a> State<'a> { @@ -262,9 +263,19 @@ impl<'a> State<'a> { State { syntax, loop_depth: Cell::new(0), + level: Cell::new(Level::default()), } } + fn nest<'b>(&self, i: &'b str) -> Result<(), nom::Err>> { + self.level.set(self.level.get().nest(i)?); + Ok(()) + } + + fn leave(&self) { + self.level.set(self.level.get().leave()); + } + fn tag_block_start<'i>(&self, i: &'i str) -> IResult<&'i str, &'i str> { tag(self.syntax.block_start)(i) } @@ -337,5 +348,9 @@ impl Level { Ok(Level(self.0 + 1)) } + fn leave(&self) -> Self { + Level(self.0 - 1) + } + const MAX_DEPTH: u8 = 64; } -- cgit