diff --git a/lib/marked.js b/lib/marked.js index 5ca95941ec..a6a2bbe6a5 100644 --- a/lib/marked.js +++ b/lib/marked.js @@ -55,7 +55,7 @@ block._tag = '(?!(?:' block.html = edit(block.html) .replace('comment', //) .replace('closed', /<(tag)[\s\S]+?<\/\1>/) - .replace('closing', /]*)*?\/?>/) + .replace('closing', /\s]*)*?\/?>/) .replace(/tag/g, block._tag) .getRegex(); @@ -461,10 +461,10 @@ var inline = { escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/, url: noop, - tag: /^|^<\/?[a-zA-Z0-9\-]+(?:"[^"]*"|'[^']*'|\s[^<'">\/]*)*?\/?>/, + tag: /^|^<\/?[a-zA-Z0-9\-]+(?:"[^"]*"|'[^']*'|\s[^<'">\/\s]*)*?\/?>/, link: /^!?\[(inside)\]\(href\)/, reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, - nolink: /^!?\[((?:\[[^\]]*\]|\\[\[\]]|[^\[\]])*)\]/, + nolink: /^!?\[((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\]/, strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, em: /^_([^\s_](?:[^_]|__)+?[^\s_])_\b|^\*((?:\*\*|[^*])+?)\*(?!\*)/, code: /^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/, @@ -481,7 +481,7 @@ inline.autolink = edit(inline.autolink) .replace('email', inline._email) .getRegex() -inline._inside = /(?:\[[^\]]*\]|\\[\[\]]|[^\[\]]|\](?=[^\[]*\]))*/; +inline._inside = /(?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]]|\](?=[^\[]*\]))*/; inline._href = /\s*?(?:\s+['"]([\s\S]*?)['"])?\s*/; inline.link = edit(inline.link) diff --git a/test/index.js b/test/index.js index c2a861c4c2..b1f50fccfb 100644 --- a/test/index.js +++ b/test/index.js @@ -110,8 +110,13 @@ function runTests(engine, options) { for (i = 0; i < len; i++) { filename = filenames[i]; file = files[filename]; + + var before = process.hrtime(); success = testFile(engine, file, filename, i + 1); - if (success) { + var elapsed = process.hrtime(before); + var tookLessThanOneSec = (elapsed[0] === 0); + + if (success && tookLessThanOneSec) { succeeded++; } else { failed++; diff --git a/test/new/headings-id.html b/test/new/headings_id.html similarity index 100% rename from test/new/headings-id.html rename to test/new/headings_id.html diff --git a/test/new/headings-id.md b/test/new/headings_id.md similarity index 100% rename from test/new/headings-id.md rename to test/new/headings_id.md diff --git a/test/new/redos_html_closing.html b/test/new/redos_html_closing.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/new/redos_html_closing.md b/test/new/redos_html_closing.md new file mode 100644 index 0000000000..65bc5f7362 --- /dev/null +++ b/test/new/redos_html_closing.md @@ -0,0 +1 @@ +a'a diff --git a/test/new/redos_nolink.html b/test/new/redos_nolink.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/new/redos_nolink.md b/test/new/redos_nolink.md new file mode 100644 index 0000000000..a43a156820 --- /dev/null +++ b/test/new/redos_nolink.md @@ -0,0 +1 @@ +![\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]\[[]!\