Description
First, thank you so much for peg
. I am an happy user since 2018.
I have one feature request, would it be possible to limit the recursion depth of parsers and return a nice error instead of having the currently parsing thread crashing on too nested inputs with a stack overflow error?
For example if I write the grammar:
pub rule arithmetic() -> i64 = precedence!{
x:(@) "+" y:@ { x + y }
x:(@) "-" y:@ { x - y }
--
n:number() { n }
"(" e:arithmetic() ")" { e }
}
and give for input ((((((((((((((((1))))))))))))))))
the parser generated by peg
will recuse 16 times to parse the content. An ill intentioned user can give for input to the parser a nested enough input to trigger a stack overflow.
A possible nice way to circumvent this problem in a generic manner might be to give to the parser generator a maximal allowed stack size and, if this parameter is provided, increment/decrement a counter at all rules entry/exit and return an error if the content reaches the threshold. But there is maybe a nicer solution I don't see.
What do you think about it?