| From d430b5d912bebe87529b887f408ee55c82a0e003 Mon Sep 17 00:00:00 2001 |
| From: Michele Romano <33063403+Mik317@users.noreply.github.com> |
| Date: Fri, 26 Jun 2020 20:16:47 +0200 |
| Subject: [PATCH 1/7] Update version.js |
| |
| --- |
| lib/local/version.js | 15 ++++++++++++--- |
| 1 file changed, 12 insertions(+), 3 deletions(-) |
| |
| diff --git a/tools/node_tools/node_modules/launchpad/lib/local/version.js b/tools/node_tools/node_modules/launchpad/lib/g/local/version.js |
| index 0110a74..2c02bef 100644 |
| --- a/tools/node_tools/node_modules/launchpad/lib/local/version.js |
| +++ b/tools/node_tools/node_modules/launchpad/lib/local/version.js |
| @@ -6,6 +6,15 @@ var plist = require('plist'); |
| var utils = require('./utils'); |
| var debug = require('debug')('launchpad:local:version'); |
| |
| +var validPath = function (filename){ |
| + var filter = /[`!@#$%^&*()_+\-=\[\]{};':"\\|,<>\/?~]/; |
| + if (filter.test(filename)){ |
| + console.log('\nInvalid characters inside the path to the browser\n'); |
| + return |
| + } |
| + return filename; |
| +} |
| + |
| module.exports = function(browser) { |
| if (!browser || !browser.path) { |
| return Q(null); |
| @@ -18,7 +27,7 @@ module.exports = function(browser) { |
| |
| debug('Retrieving version for windows executable', command); |
| // Can't use Q.nfcall here unfortunately because of non 0 exit code |
| - exec(command, function(error, stdout) { |
| + exec(command.split(' ')[0], command.split(' ').slice(1), function(error, stdout) { |
| var regex = /ProductVersion:\s*(.*)/; |
| // ShowVer.exe returns a non zero status code even if it works |
| if (typeof stdout === 'string' && regex.test(stdout)) { |
| @@ -47,8 +56,8 @@ module.exports = function(browser) { |
| } |
| |
| // Try executing <browser> --version (everything else) |
| - return Q.nfcall(exec, browser.path + ' --version').then(function(stdout) { |
| - debug('Ran ' + browser.path + ' --version', stdout); |
| + return Q.nfcall(exec, validPath(browser.path) + ' --version').then(function(stdout) { |
| + debug('Ran ' + validPath(browser.path) + ' --version', stdout); |
| var version = utils.getStdout(stdout); |
| if (version) { |
| browser.version = version; |
| |
| From 09ce4fab2fd53cab893ceaa3b4d7f997af9b41d8 Mon Sep 17 00:00:00 2001 |
| From: Michele Romano <33063403+Mik317@users.noreply.github.com> |
| Date: Fri, 26 Jun 2020 20:18:35 +0200 |
| Subject: [PATCH 2/7] Update instance.js |
| |
| --- |
| lib/local/instance.js | 11 +++++++++-- |
| 1 file changed, 9 insertions(+), 2 deletions(-) |
| |
| diff --git a/tools/node_tools/node_modules/launchpad/lib/local/instance.js b/tools/node_tools/node_modules/launchpad/lib/g/local/instance.js |
| index 484a866..b49990f 100644 |
| --- a/tools/node_tools/node_modules/launchpad/lib/local/instance.js |
| +++ b/tools/node_tools/node_modules/launchpad/lib/local/instance.js |
| @@ -5,8 +5,15 @@ var EventEmitter = require('events').EventEmitter; |
| var debug = require('debug')('launchpad:local:instance'); |
| var rimraf = require('rimraf'); |
| |
| +var safe = function (str) { |
| + // Avoid quotes makes impossible escape the `multi command` scenario |
| + return str.replace(/['"]+/g, ''); |
| +} |
| + |
| var getProcessId = function (name, callback) { |
| |
| + name = safe(name); |
| + |
| var commands = { |
| darwin: "ps -clx | grep '" + name + "$' | awk '{print $2}' | head -1", |
| linux: "ps -ax | grep '" + name + "$' | awk '{print $2}' | head -1", |
| @@ -90,11 +97,11 @@ Instance.prototype.stop = function (callback) { |
| } catch (error) {} |
| } else { |
| if (this.options.command.indexOf('open') === 0) { |
| - command = 'osascript -e \'tell application "' + self.options.process + '" to quit\''; |
| + command = 'osascript -e \'tell application "' + safe(self.options.process) + '" to quit\''; |
| debug('Executing shutdown AppleScript', command); |
| exec(command); |
| } else if (process.platform === 'win32') { |
| - command = 'taskkill /IM ' + (this.options.imageName || path.basename(this.cmd)); |
| + command = 'taskkill /IM "' + safe(this.options.imageName || path.basename(this.cmd)) + '"'; |
| debug('Executing shutdown taskkil', command); |
| exec(command).once('exit', function(data) { |
| self.emit('stop', data); |
| |
| From d3993fce090ed6ef378c1f0594eff18d125dad1e Mon Sep 17 00:00:00 2001 |
| From: Michele Romano <33063403+Mik317@users.noreply.github.com> |
| Date: Fri, 26 Jun 2020 20:19:17 +0200 |
| Subject: [PATCH 3/7] Update version.js |
| |
| --- |
| lib/local/version.js | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| diff --git a/tools/node_tools/node_modules/launchpad/lib/local/version.js b/tools/node_tools/node_modules/launchpad/lib/g/local/version.js |
| index 2c02bef..5eac082 100644 |
| --- a/tools/node_tools/node_modules/launchpad/lib/local/version.js |
| +++ b/tools/node_tools/node_modules/launchpad/lib/local/version.js |
| @@ -6,6 +6,7 @@ var plist = require('plist'); |
| var utils = require('./utils'); |
| var debug = require('debug')('launchpad:local:version'); |
| |
| +// Validate paths supplied by the user in order to avoid "arbitrary command execution" |
| var validPath = function (filename){ |
| var filter = /[`!@#$%^&*()_+\-=\[\]{};':"\\|,<>\/?~]/; |
| if (filter.test(filename)){ |
| |
| From abf3dbcc79e6b338338594ab2dbef834550e8f65 Mon Sep 17 00:00:00 2001 |
| From: Michele Romano <33063403+Mik317@users.noreply.github.com> |
| Date: Mon, 29 Jun 2020 13:32:50 +0200 |
| Subject: [PATCH 4/7] Update instance.js |
| |
| --- |
| lib/local/instance.js | 10 +++++++--- |
| 1 file changed, 7 insertions(+), 3 deletions(-) |
| |
| diff --git a/tools/node_tools/node_modules/launchpad/lib/local/instance.js b/tools/node_tools/node_modules/launchpad/lib/g/local/instance.js |
| index b49990f..9375d1f 100644 |
| --- a/tools/node_tools/node_modules/launchpad/lib/local/instance.js |
| +++ b/tools/node_tools/node_modules/launchpad/lib/local/instance.js |
| @@ -1,6 +1,7 @@ |
| var path = require('path'); |
| var spawn = require("child_process").spawn; |
| var exec = require("child_process").exec; |
| +var execFile = require("child_process").execFile; |
| var EventEmitter = require('events').EventEmitter; |
| var debug = require('debug')('launchpad:local:instance'); |
| var rimraf = require('rimraf'); |
| @@ -99,11 +100,14 @@ Instance.prototype.stop = function (callback) { |
| if (this.options.command.indexOf('open') === 0) { |
| command = 'osascript -e \'tell application "' + safe(self.options.process) + '" to quit\''; |
| debug('Executing shutdown AppleScript', command); |
| - exec(command); |
| + command = command.split(' '); |
| + execFile(command[0], command.slice(1)); |
| } else if (process.platform === 'win32') { |
| - command = 'taskkill /IM "' + safe(this.options.imageName || path.basename(this.cmd)) + '"'; |
| + //Adding `"` wasn't safe/functional on Win systems |
| + command = 'taskkill /IM ' + (this.options.imageName || path.basename(this.cmd); |
| debug('Executing shutdown taskkil', command); |
| - exec(command).once('exit', function(data) { |
| + command = command.split(' '); |
| + execFile(command[0], command.slice(1)).once('exit', function(data) { |
| self.emit('stop', data); |
| }); |
| } else { |
| |
| From 68518b274c9351f799d41ce85f23499ca4a785e9 Mon Sep 17 00:00:00 2001 |
| From: Michele Romano <33063403+Mik317@users.noreply.github.com> |
| Date: Tue, 30 Jun 2020 00:01:31 +0200 |
| Subject: [PATCH 5/7] Update instance.js |
| |
| --- |
| lib/local/instance.js | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/tools/node_tools/node_modules/launchpad/lib/local/instance.js b/tools/node_tools/node_modules/launchpad/lib/g/local/instance.js |
| index 9375d1f..f157dd4 100644 |
| --- a/tools/node_tools/node_modules/launchpad/lib/local/instance.js |
| +++ b/tools/node_tools/node_modules/launchpad/lib/local/instance.js |
| @@ -104,7 +104,7 @@ Instance.prototype.stop = function (callback) { |
| execFile(command[0], command.slice(1)); |
| } else if (process.platform === 'win32') { |
| //Adding `"` wasn't safe/functional on Win systems |
| - command = 'taskkill /IM ' + (this.options.imageName || path.basename(this.cmd); |
| + command = 'taskkill /IM ' + (this.options.imageName || path.basename(this.cmd)); |
| debug('Executing shutdown taskkil', command); |
| command = command.split(' '); |
| execFile(command[0], command.slice(1)).once('exit', function(data) { |
| |
| From e711d07d40d39162ea4bdb1ed344c58f92bfa10b Mon Sep 17 00:00:00 2001 |
| From: Michele Romano <33063403+Mik317@users.noreply.github.com> |
| Date: Fri, 3 Jul 2020 12:30:31 +0200 |
| Subject: [PATCH 6/7] Update version.js |
| |
| --- |
| lib/local/version.js | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| diff --git a/tools/node_tools/node_modules/launchpad/lib/local/version.js b/tools/node_tools/node_modules/launchpad/lib/g/local/version.js |
| index 5eac082..d1403a0 100644 |
| --- a/tools/node_tools/node_modules/launchpad/lib/local/version.js |
| +++ b/tools/node_tools/node_modules/launchpad/lib/local/version.js |
| @@ -1,5 +1,6 @@ |
| var fs = require('fs'); |
| var exec = require('child_process').exec; |
| +var execFile = require('child_process').execFile; |
| var Q = require('q'); |
| var path = require('path'); |
| var plist = require('plist'); |
| @@ -8,7 +9,7 @@ var debug = require('debug')('launchpad:local:version'); |
| |
| // Validate paths supplied by the user in order to avoid "arbitrary command execution" |
| var validPath = function (filename){ |
| - var filter = /[`!@#$%^&*()_+\-=\[\]{};':"\\|,<>\/?~]/; |
| + var filter = /[`!@#$%^&*()_+\-=\[\]{};':"|,<>?~]/; |
| if (filter.test(filename)){ |
| console.log('\nInvalid characters inside the path to the browser\n'); |
| return |
| @@ -28,7 +29,7 @@ module.exports = function(browser) { |
| |
| debug('Retrieving version for windows executable', command); |
| // Can't use Q.nfcall here unfortunately because of non 0 exit code |
| - exec(command.split(' ')[0], command.split(' ').slice(1), function(error, stdout) { |
| + execFile(command.split(' ')[0], command.split(' ').slice(1), function(error, stdout) { |
| var regex = /ProductVersion:\s*(.*)/; |
| // ShowVer.exe returns a non zero status code even if it works |
| if (typeof stdout === 'string' && regex.test(stdout)) { |
| |
| From a3ff1804f0aacfb4fa20dad1312427b81280bb3e Mon Sep 17 00:00:00 2001 |
| From: Michele Romano <33063403+Mik317@users.noreply.github.com> |
| Date: Fri, 3 Jul 2020 12:31:31 +0200 |
| Subject: [PATCH 7/7] Update version.js |
| |
| --- |
| lib/local/version.js | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/tools/node_tools/node_modules/launchpad/lib/local/version.js b/tools/node_tools/node_modules/launchpad/lib/g/local/version.js |
| index d1403a0..d937be4 100644 |
| --- a/tools/node_tools/node_modules/launchpad/lib/local/version.js |
| +++ b/tools/node_tools/node_modules/launchpad/lib/local/version.js |
| @@ -9,7 +9,7 @@ var debug = require('debug')('launchpad:local:version'); |
| |
| // Validate paths supplied by the user in order to avoid "arbitrary command execution" |
| var validPath = function (filename){ |
| - var filter = /[`!@#$%^&*()_+\-=\[\]{};':"|,<>?~]/; |
| + var filter = /[`!@#$%^&*()_+\-=\[\]{};'"|,<>?~]/; |
| if (filter.test(filename)){ |
| console.log('\nInvalid characters inside the path to the browser\n'); |
| return |