Repository navigation
fix(web): escape fenced code language attributes - #10
Conversation
Generated-with: gpt-6.1-sol (Codex)
|
Zweitprüfung (Cloud-Bot), Head
Ein formales Approve ist nicht möglich, weil der PR vom selben Account stammt. Der Draft-/Merge-Hold bleibt unberührt. Generated by Claude Code |
|
CI-Diagnose (Bot): Die roten Jobs (ubuntu 3.10/3.11) sind kein Defekt dieses PRs. Generated by Claude Code |
|
Triage (Cloud-Bot): CI-Diagnose
Der Fix liegt in #11 (Ausschluss von 6.12.0), und #11 ist grün. Empfehlung: #11 zuerst mergen, dann #10 auf Generated by Claude Code |
|
Zweitmodell-Review: Der Fix ( Generated by Claude Code |
|
Diagnose: Die roten Jobs (ubuntu 3.10/3.11) brechen in Generated by Claude Code |
lukisch
left a comment
There was a problem hiding this comment.
Zweitmodell-Review (Head 10ab7ed): Code-Fix korrekt, CI-Rot ist nicht durch dieses PR verursacht.
- Die Änderung escapt
codeBlockLangmitescapeHtmlvor dem Einsetzen insclass-Attribut. Das behebt die beschriebene Attribut-Injektion. Die Tests laden die ausgelieferten Funktionen pervmund werten kein HTML aus. Das ist sauber. - Die Fehler in
test (ubuntu-latest, 3.10)und(3.11)sind ein harter Abbruch inmain.py:259 highlightBlock(Fatal Python error: none_dealloc) intest_file_handling.py. Das ist die PySide6-6.12.0-Regression.mainschließt sie bereits mit ed46284 (!=6.12.0), dieser Branch basiert aber auf 0aea162, also davor. - Empfehlung: Branch auf aktuelles
mainrebasen, dann sollten alle acht Zellen grün werden. Ich pushe nicht auf diesen fremden Draft-Branch. - Hinweis:
actions/setup-node@v4läuft wegen der Node-20-Deprecation unter erzwungenem Node 24. Das ist nur eine Warnung, passt aber zu den offenen Dependabot-Bumps.
Freigabe/Merge bleibt beim Maintainer.
Generated by Claude Code
|
Review: Fix korrekt (Sprachattribut der Fence wird per Generated by Claude Code |
ellmos-multi-bot
left a comment
There was a problem hiding this comment.
MULTI-BOT Independent Review (Siamesischer Zwilling / Instance Isolation)
- Repo: doc-bricks/CleanMarkdown
- PR: #10 (fix(web): escape fenced code language attributes)
- Author: lukisch / gpt-6.1-sol
- Reviewer: ellmos-multi-bot (Gemini 4 Argon High on WORKSTATION-LG)
- Reviewed Head SHA: 8444445
- Base: main
- Scope of Review: Vollständiger Diff, CI-Checks, lokale Regressionstests und Lock-Status.
Review Findings & Evidence
- Diff Inspection:
- web_companion/app.js: In der Fenced-Code-Block-Verarbeitung wird codeBlockLang nun über die existierende �scapeHtml()-Funktion vor dem Einfügen in das class="language-..."-Attribut escaped (
). Dies verhindert zuverlässig ein Ausbrechen aus dem Attribut über Anführungszeichen und eingeschleuste Tags (CodeQL Alert 3 Preview HTML Sink). - ests/test_web_renderer.cjs: 6 dedizierte Renderer-Tests mit Node built-in Test-Runner (
ode:test,
ode:assert), die reguläre Sprachen, Body-Escaping, Unicode (日本語) sowie bösartige Attributeingaben (">, " onmouseover="probe, '<> &, ">
) isoliert prüfen.
- .github/workflows/tests.yml: Node 22 Setup-Schritt und Ausführung des Tests
ode --test tests/test_web_renderer.cjs in der Matrix integriert. - Keine Versionsänderung (Pfad A/B Regel eingehalten), keine Secret-Exposition.
- web_companion/app.js: In der Fenced-Code-Block-Verarbeitung wird codeBlockLang nun über die existierende �scapeHtml()-Funktion vor dem Einfügen in das class="language-..."-Attribut escaped (
- CI & Verification:
- 15/15 GitHub Actions Checks grün auf Commit 84444450f7abd506d946bf85ecc211a26ed9b1ee (CodeQL, Source-Platform-Smoke, Tests auf ubuntu/windows/macos für Python 3.10-3.13, Flutter analyze & test).
-
Lokaler Testlauf in isolierter Worktree-Sandbox (C:_Local_DEV\reviews\cleanmarkdown-pr10-20261102):
ode --test tests/test_web_renderer.cjs: 6/6 tests passed (0 fail).
- pytest tests/: 280 passed, 1 skipped (Symlink Windows-Privileg) in 19.15s auf Python 3.12 (100% grün).
- Lock-Status: 0 aktive Locks (lock_scan.py 100% UNLOCKED).
- Verdict: APPROVE. Vollständig qualifiziert für Merge am Head 84444450f7abd506d946bf85ecc211a26ed9b1ee.
The web renderer inserts a fenced code block's language string directly into a quoted HTML class attribute. A quote followed by an img tag breaks out of that attribute and becomes additional markup in the preview. Escape this string with the existing HTML-escaping function before interpolation.
Add six Node built-in renderer tests that execute the shipped render functions without evaluating their HTML. Four malicious/attribute-special-character cases fail on exact base 0aea162 and pass after the fix. Ordinary language/body escaping and Unicode remain covered. Run these tests explicitly with Node22 in the existing eight native Windows/Linux CI cells.
Validation: 6 renderer cases and 9 existing web-companion tests pass locally; workflow YAML parses; git diff --check passes. Native CI and independent review remain pending. No version, dependencies of the application, release, service-worker cache or runtime mirror change.
Related to CodeQL alert3's preview HTML sink. This fixes the reproduced code-fence attribute injection only; it does not establish complete sanitizer safety or resolve every alert flow. Do not dismiss the alert on this evidence alone. No browser exploit was executed.
Author model: gpt-6.1-sol (Codex). Draft only; merges disabled. Independent model review pending.