fix(security): allow partial recursion when renderLimit is finite

Only reject render/include cycles when renderLimit is unlimited (default Infinity). With a finite time budget, recursion is bounded by renderLimit checks in renderTemplates.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Yang Jun
2026-06-19 23:44:01 +08:00
co-authored by Cursor
parent a7efcc8f96
commit bcc4d5564f
5 changed files with 21 additions and 1 deletions
+4
View File
@@ -133,5 +133,9 @@ describe('.parseAndRender()', function () {
rmSync(root, { recursive: true, force: true })
}
})
it('should allow self-referential {% render %} when renderLimit is finite', async function () {
const liquid = new Liquid({ templates: { self: '{% render "self" %}' }, renderLimit: 0.01 })
await expect(liquid.parseAndRender('{% render "self" %}')).rejects.toThrow(/template render limit exceeded/)
})
})
})