markdown-it: Quadratic complexity in smartquotes with unmatched closing quotes
Published 20 Oct 2026 · Updated 20 Oct 2026
Affected packages
- Affected
- >=15.0.0 <15.0.2
- Fixed in
- 15.0.2
npm install markdown-it@15.0.2- Affected
- <14.3.2
- Fixed in
- 14.3.2
npm install markdown-it@14.3.2Details
Impact
When typographer: true is enabled, specially crafted Markdown can cause quadratic processing time in the smartquotes rule, potentially leading to denial of service in applications processing untrusted input.
Many opening double quotes followed by unmatched closing single quotes cause repeated scans of the entire opener stack. The same issue occurs with the quote types reversed.
The default configuration (typographer: false) is not affected, but this option is enabled with high probability.
Reproduction
import MarkdownIt from 'markdown-it'
import { performance } from 'node:perf_hooks'
const md = new MarkdownIt({ typographer: true })
for (const k of [2000, 4000, 8000, 16000, 32000]) {
const input = '"a '.repeat(k) + "b' ".repeat(k)
const start = performance.now()
md.render(input)
console.log(input.length, (performance.now() - start).toFixed(1), 'ms')
}Result:
|input size|time| |-|-| |12000|18ms| |24000|47ms| |48000|115ms| |96000|428ms| |192000|1586ms|
Patches
Fixed in 15.0.2 and 14.3.2.
Workarounds
Disable typography with typographer: false, or disable only the smartquotes rule:
md.disable('smartquotes')Is GHSA-r7fv-28h4-cvq7 in any of your client repos?
Checking one package by hand is fine. Checking it across forty client projects is not. NPMscan reads the lockfiles in every GitHub repo you pick, finds each project with an affected markdown-it, and gives you the command that fixes it.
References
- Linkgithub.com/markdown-it/markdown-it/security/advisories/GHSA-r7fv-28h4-cvq7
- Advisorynvd.nist.gov/vuln/detail/CVE-2026-111759
- Linkgithub.com/markdown-it/markdown-it/commit/1b379c1b6d0522421bd1a51b77337c79af2c8670
- Linkgithub.com/markdown-it/markdown-it/commit/cf27366035edf9196667110c47d9d67b030a4152
- Linkgithub.com/markdown-it/markdown-it/commit/daf5a3c32303e5d9de01b12eeb725fb5990b8162
- Packagegithub.com/markdown-it/markdown-it
- Linkgithub.com/markdown-it/markdown-it/releases/tag/14.3.2
- Linkgithub.com/markdown-it/markdown-it/releases/tag/15.0.2
Advisory data from OSV.dev (opens OSV.dev in a new tab), refreshed daily.