diff --git a/web/static/src/ts/core/qweb_vdom.ts b/web/static/src/ts/core/qweb_vdom.ts index 2b2dc0b0..9a492dde 100644 --- a/web/static/src/ts/core/qweb_vdom.ts +++ b/web/static/src/ts/core/qweb_vdom.ts @@ -644,6 +644,9 @@ const forEachDirective: Directive = { const name = node.getAttribute("t-as")!; let arrayID = ctx.generateID(); ctx.addLine(`let _${arrayID} = ${qweb._formatExpression(elems)};`); + ctx.addLine( + `if (!_${arrayID}) { throw new Error('QWeb error: Invalid loop expression')}` + ); ctx.addLine( `if (typeof _${arrayID} === 'number') { _${arrayID} = Array.from(Array(_${arrayID}).keys())}` ); diff --git a/web/static/tests/core/qweb_vdom.test.ts b/web/static/tests/core/qweb_vdom.test.ts index 352c13ed..8b3b39b2 100644 --- a/web/static/tests/core/qweb_vdom.test.ts +++ b/web/static/tests/core/qweb_vdom.test.ts @@ -545,6 +545,14 @@ describe("foreach", () => { renderToString(qweb, "test", context); expect(Object.keys(context).length).toBe(0); }); + + test("throws error if invalid loop expression", () => { + qweb.addTemplate( + "test", + `