From ff249740f11065eca2ba458b856638e2bfff16f3 Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Thu, 25 Dec 2014 12:55:52 -0700
Subject: 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.
---
 js/lib/inlines.js | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

(limited to 'js/lib')

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;
+
-- 
cgit v1.2.3