diff --git a/lib/hide-sensitive.js b/lib/hide-sensitive.js index 60984962c9..d612068b26 100644 --- a/lib/hide-sensitive.js +++ b/lib/hide-sensitive.js @@ -11,7 +11,12 @@ module.exports = (env) => { return /token|password|credential|secret|private/i.test(envVar) && size(env[envVar].trim()) >= SECRET_MIN_SIZE; }); - const regexp = new RegExp(toReplace.map((envVar) => escapeRegExp(env[envVar])).join('|'), 'g'); + const regexp = new RegExp( + toReplace + .map((envVar) => `${escapeRegExp(env[envVar])}|${encodeURI(escapeRegExp(env[envVar]))}`) + .join('|'), + 'g' + ); return (output) => output && isString(output) && toReplace.length > 0 ? output.toString().replace(regexp, SECRET_REPLACEMENT) : output; }; diff --git a/test/hide-sensitive.test.js b/test/hide-sensitive.test.js index 2b319c436d..4987d31634 100644 --- a/test/hide-sensitive.test.js +++ b/test/hide-sensitive.test.js @@ -24,6 +24,14 @@ test('Replace sensitive environment variable matching specific regex for "privat t.is(hideSensitive(env)(`https://host.com?token=${env.privateKey}`), `https://host.com?token=${SECRET_REPLACEMENT}`); }); +test('Replace url-encoded environment variable', (t) => { + const env = {privateKey: 'secret '}; + t.is( + hideSensitive(env)(`https://host.com?token=${encodeURI(env.privateKey)}`), + `https://host.com?token=${SECRET_REPLACEMENT}` + ); +}); + test('Escape regexp special characters', (t) => { const env = {SOME_CREDENTIALS: 'p$^{.+}\\w[a-z]o.*rd'}; t.is(