Skip to content
OpenAdvisories
High · 7.5 RUSTSEC-2026-0433

Quadratic parsing of nested image wikilinks with `ENABLE_WIKILINKS`

Published Oct 28, 2026 · Updated Nov 2, 2026 · Assigned by RUSTSEC

Description

With `Options::ENABLE_WIKILINKS`, handle_wikilink builds a wikilink's target
from the raw text of its body: scan_wikilink_pipe walks it looking for |, then
contains('\0') and from_replace_nuls walk it again.
Once a wikilink is created, disable_all_links only disables Link entries, so
every enclosing `![[` stays live on the wikilink stack.
On `![[![[![[…]]]]]]` each of those openers then resolves in turn and rescans
everything inside it, which is quadratic in the nesting depth.
The event count stays tiny, because in the unpiped case each enclosing image
replaces its body with a fresh text node, so all of that work is thrown away.

Applications that parse untrusted Markdown with `ENABLE_WIKILINKS` set,
including through `Options::all()`, are affected. The option is off by default.
Parsing without it is not affected.

The flaw was fixed in
[#1186](https://github.com/pulldown-cmark/pulldown-cmark/pull/1186) and
released in 0.13.6.

Affected packages

EcosystemPackageAffectedFixedRecord
crates.io pulldown-cmark >= 0.13.0, < 0.13.6 0.13.6 RUSTSEC-2026-0433

References