From d56cd070e6b020b5e377b4f2625b9f0fe2cd3b72 Mon Sep 17 00:00:00 2001 From: curbengh <43627182+curbengh@users.noreply.github.com> Date: Fri, 20 Sep 2019 19:03:41 +0100 Subject: [PATCH] fix(encode_url): skip encode non-urls --- lib/encode_url.js | 5 ++++- test/encode_url.spec.js | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/encode_url.js b/lib/encode_url.js index 6fe0cbd4..03a32752 100644 --- a/lib/encode_url.js +++ b/lib/encode_url.js @@ -1,10 +1,11 @@ 'use strict'; const { parse, format } = require('url'); +const regexNonUrl = /^(data|javascript|mailto|vbscript)/gi function encodeURL(str) { const parsed = parse(str); - if (parsed.protocol) { + if (parsed.slashes) { const obj = Object.assign({}, { auth: parsed.auth, protocol: parsed.protocol, @@ -23,6 +24,8 @@ function encodeURL(str) { return format(obj); } + if (str.match(regexNonUrl)) return str; + return encodeURI(safeDecodeURI(str)); } diff --git a/test/encode_url.spec.js b/test/encode_url.spec.js index 05f81fac..0f9c4fd1 100644 --- a/test/encode_url.spec.js +++ b/test/encode_url.spec.js @@ -94,4 +94,9 @@ describe('encodeURL', () => { const content = '#fóo-bár'; encodeURL(content).should.eql('#f%C3%B3o-b%C3%A1r'); }); + + it('data URLs', () => { + const content = 'data:,Hello%2C%20World!'; + encodeURL(content).should.eql(content); + }); });