Fix URL parsing when URL has been encoded with escape() (fixes #4322) (#4338)

Этот коммит содержится в:
Pierre Rudloff
2016-10-26 18:36:16 +02:00
коммит произвёл Harrison Healey
родитель c07cdd666a
Коммит 7e67eabca9
2 изменённых файлов: 21 добавлений и 1 удалений

Просмотреть файл

@@ -501,4 +501,18 @@ describe('Markdown.Links', function() {
done();
});
it('Links containing %', function(done) {
assert.equal(
Markdown.format('https://en.wikipedia.org/wiki/%C3%89').trim(),
'<p><a class="theme markdown__link" href="https://en.wikipedia.org/wiki/%C3%89" rel="noreferrer" target="_blank">https://en.wikipedia.org/wiki/%C3%89</a></p>'
);
assert.equal(
Markdown.format('https://en.wikipedia.org/wiki/%E9').trim(),
'<p><a class="theme markdown__link" href="https://en.wikipedia.org/wiki/%E9" rel="noreferrer" target="_blank">https://en.wikipedia.org/wiki/%E9</a></p>'
);
done();
});
});

Просмотреть файл

@@ -135,7 +135,13 @@ class MattermostMarkdownRenderer extends marked.Renderer {
let outHref = href;
try {
const unescaped = decodeURIComponent(unescape(href)).replace(/[^\w:]/g, '').toLowerCase();
let unescaped = unescape(href);
try {
unescaped = decodeURIComponent(unescaped);
} catch (e) {
unescaped = global.unescape(unescaped);
}
unescaped = unescaped.replace(/[^\w:]/g, '').toLowerCase();
if (unescaped.indexOf('javascript:') === 0 || unescaped.indexOf('vbscript:') === 0 || unescaped.indexOf('data:') === 0) { // eslint-disable-line no-script-url
return text;