diff options
author | John MacFarlane <jgm@berkeley.edu> | 2014-12-25 12:55:52 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2014-12-25 12:55:52 -0700 |
commit | ff249740f11065eca2ba458b856638e2bfff16f3 (patch) | |
tree | 2b124d0c5d5249f065a33503371be4e3315ff55b | |
parent | 2da7c3f21e2b70cfd08d0f193eeaa6f00e9eb1b8 (diff) |
Fixed infinite loop in JS parser for link-in-link-in-image.
Partially addresses #252.
This fixes the infinite loop, and brings the JS parser into
agreement with cmark, but both still have bad output in this
case, so more work is needed.
-rw-r--r-- | js/lib/inlines.js | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/js/lib/inlines.js b/js/lib/inlines.js index 297d31f..994cc1e 100644 --- a/js/lib/inlines.js +++ b/js/lib/inlines.js @@ -449,6 +449,7 @@ var parseOpenBracket = function(inlines) { var startpos = this.pos; this.pos += 1; + inlines.push(Str("[")); // Add entry to stack for this opener @@ -463,6 +464,7 @@ var parseOpenBracket = function(inlines) { if (this.delimiters.previous !== null) { this.delimiters.previous.next = this.delimiters; } + return true; }; @@ -515,6 +517,7 @@ var parseCloseBracket = function(inlines) { // look through stack of delimiters for a [ or ! opener = this.delimiters; + while (opener !== null) { if (opener.cc === C_OPEN_BRACKET || opener.cc === C_BANG) { break; @@ -599,13 +602,7 @@ var parseCloseBracket = function(inlines) { closer_above = null; while (opener !== null) { if (opener.cc === C_OPEN_BRACKET) { - if (closer_above) { - closer_above.previous = opener.previous; - } else { - this.delimiters = opener.previous; - } - } else { - closer_above = opener; + this.removeDelimiter(opener); // remove this opener from stack } opener = opener.previous; } @@ -826,3 +823,4 @@ function InlineParser(){ } module.exports = InlineParser; + |