Skip to content

Commit

Permalink
Fix two exponential regex backtracking vulnerabilities
Browse files Browse the repository at this point in the history
ESCAPED_CHAR already matches `\\`, so matching it again in another
alternative was just causing an exponential complexity explosion.

Fixes commonmark#157.

Signed-off-by: Anders Kaseorg <[email protected]>
  • Loading branch information
andersk committed Mar 10, 2019
1 parent 2052768 commit 712e4b7
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions lib/inlines.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ var reLinkTitle = new RegExp(
'\\((' + ESCAPED_CHAR + '|[^)\\x00])*\\))');

var reLinkDestinationBraces = new RegExp(
'^(?:[<](?:[^<>\\n\\\\\\x00]' + '|' + ESCAPED_CHAR + '|' + '\\\\)*[>])');
'^(?:[<](?:[^<>\\n\\\\\\x00]' + '|' + ESCAPED_CHAR + ')*[>])');

var reEscapable = new RegExp('^' + ESCAPABLE);

Expand Down Expand Up @@ -79,7 +79,7 @@ var reInitialSpace = /^ */;
var reSpaceAtEndOfLine = /^ *(?:\n|$)/;

var reLinkLabel = new RegExp('^\\[(?:[^\\\\\\[\\]]|' + ESCAPED_CHAR +
'|\\\\){0,1000}\\]');
'){0,1000}\\]');

// Matches a string of non-special characters.
var reMain = /^[^\n`\[\]\\!<&*_'"]+/m;
Expand Down

0 comments on commit 712e4b7

Please sign in to comment.