Patch showdown for span nesting limit Closes #2722 #2714

3da79ebcff065eccc3ccc10cb9e447762268cf33

Cohee <18619528+Cohee1207@users.noreply.github.com>

2 files changed, +25 -0Ignore whitespace
public/index.html+1 -0
@@ -6540,6 +6540,7 @@
6540 <script src="lib/jquery-cookie-1.4.1.min.js"></script>6540 <script src="lib/jquery-cookie-1.4.1.min.js"></script>
6541 <script src="lib/jquery.ui.touch-punch.min.js"></script>6541 <script src="lib/jquery.ui.touch-punch.min.js"></script>
6542 <script src="lib/showdown.min.js"></script>6542 <script src="lib/showdown.min.js"></script>
6543 <script src="lib/showdown-patch.js"></script>
6543 <script src="lib/showdown-katex.min.js"></script>6544 <script src="lib/showdown-katex.min.js"></script>
6544 <script src="lib/popper.js"></script>6545 <script src="lib/popper.js"></script>
6545 <script src="lib/purify.min.js"></script>6546 <script src="lib/purify.min.js"></script>
public/lib/showdown-patch.js+24 -0
@@ -0,0 +1,24 @@
1showdown.subParser('makehtml.unhashHTMLSpans', function (text, options, globals) {
2 'use strict';
3 text = globals.converter._dispatch('makehtml.unhashHTMLSpans.before', text, options, globals).getText();
4
5 for (var i = 0; i < globals.gHtmlSpans.length; ++i) {
6 var repText = globals.gHtmlSpans[i],
7 // limiter to prevent infinite loop (assume 10 as limit for recurse)
8 limit = 0;
9
10 while (/¨C(\d+)C/.test(repText)) {
11 var num = RegExp.$1;
12 repText = repText.replace('¨C' + num + 'C', globals.gHtmlSpans[num]);
13 if (limit === 10000) {
14 console.error('maximum nesting of 10000 spans reached!!!');
15 break;
16 }
17 ++limit;
18 }
19 text = text.replace('¨C' + i + 'C', repText);
20 }
21
22 text = globals.converter._dispatch('makehtml.unhashHTMLSpans.after', text, options, globals).getText();
23 return text;
24});