From dd3dc8c924ff4a30add9c9bcdf39e9dfd88504e3 Mon Sep 17 00:00:00 2001 From: hmhealey Date: Fri, 20 Nov 2015 11:43:44 -0500 Subject: Fixed newlines being stripped from multiline code blocks --- web/react/utils/markdown.jsx | 47 +++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 16 deletions(-) (limited to 'web') diff --git a/web/react/utils/markdown.jsx b/web/react/utils/markdown.jsx index 7957ea31b..b0ec64bfd 100644 --- a/web/react/utils/markdown.jsx +++ b/web/react/utils/markdown.jsx @@ -110,32 +110,47 @@ class MattermostMarkdownRenderer extends marked.Renderer { this.formattingOptions = formattingOptions; } - code(code, language) { - let usedLanguage = language; + code(code, language, escaped) { + let usedLanguage = language || ''; + usedLanguage = usedLanguage.toLowerCase(); - if (String(usedLanguage).toLocaleLowerCase() === 'html') { + // treat html as xml to prevent injection attacks + if (usedLanguage === 'html') { usedLanguage = 'xml'; } - if (usedLanguage && (usedLanguage === 'tex' || usedLanguage === 'latex')) { + if (HighlightedLanguages[usedLanguage]) { + const parsed = highlightJs.highlight(usedLanguage, code); + + return ( + '
' + + '' + + HighlightedLanguages[usedLanguage] + + '' + + '
' +
+                        '' +
+                            parsed.value +
+                        '' +
+                    '
' + + '
' + ); + } else if (usedLanguage === 'tex' || usedLanguage === 'latex') { try { - var html = katex.renderToString(TextFormatting.sanitizeHtml(code), {throwOnError: false, displayMode: true}); + const html = katex.renderToString(TextFormatting.sanitizeHtml(code), {throwOnError: false, displayMode: true}); + return '
' + html + '
'; } catch (e) { - return '
' + TextFormatting.sanitizeHtml(code) + '
'; + // fall through if latex parsing fails and handle below } } - if (!usedLanguage || highlightJs.listLanguages().indexOf(usedLanguage) < 0) { - let parsed = super.code(code, usedLanguage); - return '
' + TextFormatting.sanitizeHtml($(parsed).text()) + '
'; - } - - let parsed = highlightJs.highlight(usedLanguage, code); - return '
' + - '' + HighlightedLanguages[usedLanguage] + '' + - '' + parsed.value + '' + - '
'; + return ( + '
' +
+                '' +
+                    (escaped ? code : TextFormatting.sanitizeHtml(code)) + '\n' +
+                '' +
+            '
' + ); } br() { -- cgit v1.2.3-1-g7c22