' +
+ '' +
+ parsed.value +
+ '' +
+ '' +
+ 'diff --git a/web/react/utils/markdown.jsx b/web/react/utils/markdown.jsx index 7957ea31b3..b0ec64bfde 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 ( + '
' +
+ '' +
+ parsed.value +
+ '' +
+ '' +
+ '' + TextFormatting.sanitizeHtml($(parsed).text()) + '' + parsed.value + '' +
- '' +
+ '' +
+ (escaped ? code : TextFormatting.sanitizeHtml(code)) + '\n' +
+ '' +
+ ''
+ );
}
br() {