From 33359ab36cacb7bf14b382399b2583ced5d00897 Mon Sep 17 00:00:00 2001 From: phillipc Date: Tue, 21 Apr 2026 19:29:22 +0200 Subject: [PATCH 1/2] Fix makeTemplateNode bypassing HTML sanitization Route ").appendTo(document.body) + $template.text('
  • ') + + try { + options.templateSizeLimit = 10 + + assert.throws(function () { + applyBindings(['G1'], target[0]) + }, /Template is too long/) + } finally { + options.templateSizeLimit = originalTemplateSizeLimit + $template.remove() + } + }) + + it('rejects nested script markup in named ").appendTo(document.body) + $template.text('
  • ') + + try { + options.allowScriptTagsInTemplates = false + + assert.throws(function () { + applyBindings(['G1'], target[0]) + }, /Script-tag in template detected/) + } finally { + options.allowScriptTagsInTemplates = originalAllowScriptTagsInTemplates + $template.remove() + } + }) + + it('sanitizes named ").appendTo(document.body) + const list = ['G1'] + let sanitizedHtml = '' + $template.text('
  • ') + + try { + options.sanitizeHtmlTemplate = function (html: string) { + sanitizedHtml = html + return html.replace('
  • ', function () { const target = $('') const list = ['H1', 'H2'] diff --git a/packages/binding.foreach/src/foreach.ts b/packages/binding.foreach/src/foreach.ts index 1552dd722..550cc8909 100644 --- a/packages/binding.foreach/src/foreach.ts +++ b/packages/binding.foreach/src/foreach.ts @@ -12,7 +12,7 @@ import { virtualElements, domData, domNodeIsContainedBy, - validateHTMLInput + parseHtmlForTemplateNodes } from '@tko/utils' import { isObservable, unwrap, observable } from '@tko/observable' @@ -21,8 +21,6 @@ import type { ObservableArray } from '@tko/observable' import { contextFor, applyBindingsToDescendants, AsyncBindingHandler } from '@tko/bind' -import type { AllBindings } from '@tko/bind' - // Utilities const MAX_LIST_SIZE = Number.MAX_SAFE_INTEGER @@ -64,8 +62,7 @@ function makeTemplateNode(sourceNode) { // For e.g.