diff --git a/src/rules.ts b/src/rules.ts index fd77781ea3..fa2dbf7913 100644 --- a/src/rules.ts +++ b/src/rules.ts @@ -378,7 +378,7 @@ const tag = edit( .replace('attribute', /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/) .getRegex(); -const _inlineLabel = /(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/; +const _inlineLabel = /(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/; const link = edit(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/) .replace('label', _inlineLabel) diff --git a/test/specs/redos/backticks_in_link_no_close.html b/test/specs/redos/backticks_in_link_no_close.html new file mode 100644 index 0000000000..569364875e --- /dev/null +++ b/test/specs/redos/backticks_in_link_no_close.html @@ -0,0 +1 @@ +

[code0 code1 code2 code3 code4 code5 code6 code7 code8 code9 code10 code11 code12 code13 code14

diff --git a/test/specs/redos/backticks_in_link_no_close.md b/test/specs/redos/backticks_in_link_no_close.md new file mode 100644 index 0000000000..d37298cc73 --- /dev/null +++ b/test/specs/redos/backticks_in_link_no_close.md @@ -0,0 +1 @@ +[````code0```` ````code1```` ````code2```` ````code3```` ````code4```` ````code5```` ````code6```` ````code7```` ````code8```` ````code9```` ````code10```` ````code11```` ````code12```` ````code13```` ````code14````