Development record
renderedText substitutes a space for a removed HTML tag so a tag inside a word splits it and the excluded heading escapes on all four heading paths
renderedText substitutes a space for a removed HTML tag so a tag inside a word splits it and the excluded heading escapes on all four heading paths
Found by the round-9 adversarial security review of build/itd-183. REGRESSION INTRODUCED BY 2225d6cb. The cheapest of the round's regressions to trigger, and it defeats all four heading paths at once.
renderedText now does out = htmlTagRe.ReplaceAllString(out, " "). A tag
INSIDE a word therefore splits the word, and the slug stops matching:
renderedText("Audi<i>t</i> Notes")
HEAD: "Audi t Notes" -> slug audi-t-notes
parent: "Audit Notes" -> slug audit-notes
So ## Audit Note<sup>s</sup> in any admitted file passes the section loop's
exact-title lookup, then passes namesExcludedHeading -> sameRendering, and
the section travels. No HTML-block trickery and no unclosed anything is needed;
a renderer shows exactly "Audit Notes".
Verified admitted on HEAD and refused on the parent on every path:
## Audi<i>t</i> Notes (section scan), ## Audi<i>t</i> Notes (indented
ATX), Audi<i>t</i> Notes\n=== (setext), <h2>Audi<i>t</i> Notes</h2> (raw
HTML), and the same shape against Why This Matters and Open Questions.
The round traded ONE case (Audit<br>Notes, which the parent leaked) for
SEVEN. This is the exact pattern the eight prior rounds were trying to break:
closed on one path, opened on its neighbour.
Remedy (class-closing): take BOTH readings, exactly as this same commit already
did for the soft heading bound. Compare the slug of renderedText with tags
replaced by "" AND with tags replaced by " ", and refuse if either names an
excluded heading. That closes Audit<br>Notes and Audi<i>t</i> Notes
together and cannot reopen either.
Frontmatter
| id | iss-2608301237459461 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | critical |
.abcd/work/issues/resolved/iss-2608301237459461-renderedtext-substitutes-a-space-for-a.md
open on GitHub ↗ · commit history ↗
mentions1
- itd-183The cold reading sees exactly what the assembler passes — positive inclusion, field projection, and a per-run manifest