From 2af297f81ac465feb3277ba7b92f7236409370b0 Mon Sep 17 00:00:00 2001 From: Harttle Date: Sun, 22 Dec 2024 15:46:56 +0800 Subject: [PATCH] fix: memoryLimit doesn't work in for tag, #776 --- docs/package.json | 2 +- docs/themes/navy/source/js/main.js | 5 ++++- src/render/expression.ts | 1 + test/e2e/issues.spec.ts | 5 +++++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/package.json b/docs/package.json index 60b2bcba1b..71fbcf87ab 100644 --- a/docs/package.json +++ b/docs/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "hexo": { - "version": "5.4.0" + "version": "7.3.0" }, "scripts": { "build": "hexo generate", diff --git a/docs/themes/navy/source/js/main.js b/docs/themes/navy/source/js/main.js index ec4f2d7a24..2a33323cba 100644 --- a/docs/themes/navy/source/js/main.js +++ b/docs/themes/navy/source/js/main.js @@ -60,7 +60,10 @@ /* global liquidjs, ace */ if (!location.pathname.match(/playground.html$/)) return; updateVersion(liquidjs.version); - const engine = new liquidjs.Liquid(); + const engine = new liquidjs.Liquid({ + memoryLimit: 1e5, + renderLimit: 1e5 + }); const editor = createEditor('editorEl', 'liquid'); const dataEditor = createEditor('dataEl', 'json'); const preview = createEditor('previewEl', 'html'); diff --git a/src/render/expression.ts b/src/render/expression.ts index 4131cf6efd..b6ded42467 100644 --- a/src/render/expression.ts +++ b/src/render/expression.ts @@ -67,6 +67,7 @@ export function evalQuotedToken (token: QuotedToken) { function * evalRangeToken (token: RangeToken, ctx: Context) { const low: number = yield evalToken(token.lhs, ctx) const high: number = yield evalToken(token.rhs, ctx) + ctx.memoryLimit.use(high - low + 1) return range(+low, +high + 1) } diff --git a/test/e2e/issues.spec.ts b/test/e2e/issues.spec.ts index 554d4c0b52..ae0e9cc039 100644 --- a/test/e2e/issues.spec.ts +++ b/test/e2e/issues.spec.ts @@ -524,4 +524,9 @@ describe('Issues', function () { const result = engine.parseAndRenderSync(`\n{{ "foo" | pos }}`) expect(result).toEqual('\n[2,12] foo') }) + it("memoryLimit doesn't work in for tag #776", () => { + const engine = new Liquid() + const tpl = `{% for i in (1..1000000000) %} {{'a'}} {% endfor %}` + expect(() => engine.parseAndRenderSync(tpl)).toThrow(/memory out/) + }) })