Skip to content

Introduce PartialRecursionDepthLimit - #552

Merged
oformaniuk merged 3 commits into
Handlebars-Net:masterfrom
RoosterDragon:recursion-limit
Apr 1, 2024
Merged

Introduce PartialRecursionDepthLimit#552
oformaniuk merged 3 commits into
Handlebars-Net:masterfrom
RoosterDragon:recursion-limit

Conversation

@RoosterDragon

Copy link
Copy Markdown
Contributor

When evaluating templates with partials, it is possible to recurse in the evaluation of those partials. This can be useful for dealing with tree like data, such as rendering a list of friends-of-friends-of-friends-of-etc....

The ability to recurse can lead to stack overflows. For example if a sufficiently deep tree is provided as input data, or more simply if the partial calls itself in an infinite loop. As a stack overflow terminates the process, this is not desirable behaviour as it is an unavoidable crash.

To resolve this a configurable PartialRecursionDepthLimit is introduced, defaulting to 100. Now when a template is evaluated a HandlebarsRuntimeException will be thrown if this limit is reached. This allows the caller to catch the exception and recover gracefully, rather than terminating the process.

When evaluating templates with partials, it is possible to recurse in the evaluation of those partials. This can be useful for dealing with tree like data, such as rendering a list of friends-of-friends-of-friends-of-etc....
The ability to recurse can lead to stack overflows. For example if a sufficiently deep tree is provided as input data, or more simply if the partial calls itself in an infinite loop. As a stack overflow terminates the process, this is not desirable behaviour as it is an unavoidable crash.
To resolve this a configurable PartialRecursionDepthLimit is introduced, defaulting to 100. Now when a template is evaluated a HandlebarsRuntimeException will be thrown if this limit is reached. This allows the caller to catch the exception and recover gracefully, rather than terminating the process.
@sonarqubecloud

Copy link
Copy Markdown

@sonarqubecloud

Copy link
Copy Markdown

@oformaniuk
oformaniuk merged commit f3fd1ef into Handlebars-Net:masterApr 1, 2024
@RoosterDragon
RoosterDragon deleted the recursion-limit branch April 1, 2024 08:53
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@RoosterDragon@oformaniuk