Please report security issues through GitHub Security Advisory:
Do not open public issues for unpatched vulnerabilities.
Please include:
- Affected version(s)
- Reproduction steps or proof of concept
- Impact assessment
- Suggested mitigation (if available)
Maintainers will:
- Acknowledge receipt.
- Assess severity and impact.
- Prepare and release a fix.
- Publish coordinated disclosure details after remediation.
This policy covers the Rust crate in this repository. External integrations and downstream deployments are handled by their respective maintainers.
- Input HTML is always escaped before parsing.
- Dangerous URL schemes are blocked:
javascript:,data:,vbscript:,file:. - Outside fenced code blocks, suspicious invisible characters (including control and BiDi control characters) are removed from text and URL inputs:
U+200B,U+200C,U+200D,U+FEFF,U+3164U+202A-U+202E(LRE, RLE, PDF, LRO, RLO)U+2066-U+2069(LRI, RLI, FSI, PDI)
- For directional text use-cases, use UMD inline syntax instead of raw BiDi control characters:
&bdi(ltr){content};(orrtl) for bidirectional isolation with explicit direction
- Allowed blank characters are only:
U+0020(half-width space)U+3000(full-width space)
- Homograph-risk mitigation for external links:
- For
http/httpslinks with non-ASCII hostnames orxn--punycode labels, UMD adds a visual warning marker (class="umd-idn-warning-link",data-idn-warning="true") and a warning icon element. - This is a visual warning and does not block the link.
- For
- ASCII control characters are stripped from document text before parsing:
- Removed:
U+0000–U+0008,U+000B,U+000C,U+000E–U+001F,U+007F(DEL) - Preserved:
U+0009(TAB),U+000A(LF),U+000D(CR) — required for Markdown formatting - Content inside fenced code blocks (
```/~~~) is exempt from this removal, as control characters may be intentional (e.g., terminal escape sequences in examples) - Plugin content is base64-encoded by the conflict resolver before this step, so literal control characters in plugin content are inherently safe from reaching the output unsanitized. However, plugin authors are responsible for sanitizing their plugin's content before rendering it on the server side.
- Removed: