diff --git a/lib/marked.js b/lib/marked.js index 318ab60d84..9e99346462 100644 --- a/lib/marked.js +++ b/lib/marked.js @@ -1034,24 +1034,8 @@ Renderer.prototype.del = function(text) { }; Renderer.prototype.link = function(href, title, text) { - if (this.options.sanitize) { - try { - var prot = decodeURIComponent(unescape(href)) - .replace(/[^\w:]/g, '') - .toLowerCase(); - } catch (e) { - return text; - } - if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { - return text; - } - } - if (this.options.baseUrl && !originIndependentUrl.test(href)) { - href = resolveUrl(this.options.baseUrl, href); - } - try { - href = encodeURI(href).replace(/%25/g, '%'); - } catch (e) { + href = cleanUrl(this.options.sanitize, this.options.baseUrl, href); + if (href === null) { return text; } var out = 'Image

+

Image

+

Image

+

Image

+

Image

diff --git a/test/new/images.md b/test/new/images.md new file mode 100644 index 0000000000..c9d994a9b4 --- /dev/null +++ b/test/new/images.md @@ -0,0 +1,12 @@ +--- +sanitize: true +--- +![Image](javascript:alert) + +![Image](vbscript:alert) + +![Image](javascript:alert(1)) + +![Image](javascript:document;alert(1)) + +![Image](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)