From 0af297c0c892e6fbcdab8beae8f0b96ea7efba08 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 25 Dec 2025 04:23:39 +0000 Subject: [PATCH 1/2] Fix incomplete multi-character sanitization in removeXmlComments (Alert #90) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consolidated two chained regex replacements into a single atomic pattern to eliminate intermediate state that could reintroduce HTML comment markers. - Changed from: .replace(//g, "").replace(//g, "") - Changed to: .replace(/) and malformed () HTML comments in one pass, preventing any intermediate state where one pattern is removed but comment markers could be reintroduced. Fixes: #90 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- actions/setup/js/sanitize_content_core.cjs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/actions/setup/js/sanitize_content_core.cjs b/actions/setup/js/sanitize_content_core.cjs index a3e0863acaf..61f6d8014c6 100644 --- a/actions/setup/js/sanitize_content_core.cjs +++ b/actions/setup/js/sanitize_content_core.cjs @@ -278,11 +278,14 @@ function neutralizeAllMentions(s) { */ function removeXmlComments(s) { // Remove and malformed + // Use a single regex that matches both patterns to avoid introducing comment markers + // when removing one pattern reveals another // Apply repeatedly to handle nested/overlapping patterns that could reintroduce comment markers let previous; do { previous = s; - s = s.replace(//g, "").replace(//g, ""); + // Single regex matches: OR + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(//g, "").replace(//g, ""); + s = s.replace(/ and malformed + // Use a single regex that matches both patterns to avoid introducing comment markers + // when removing one pattern reveals another // Apply repeatedly to handle nested/overlapping patterns that could reintroduce comment markers let previous; do { previous = s; - s = s.replace(//g, "").replace(//g, ""); + // Single regex matches: OR + s = s.replace(/