diff --git a/lib/Local.js b/lib/Local.js index 7486bc7..98cf766 100644 --- a/lib/Local.js +++ b/lib/Local.js @@ -45,12 +45,24 @@ function Local(){ const obj = childProcess.spawnSync(that.binaryPath, that.getBinaryArgs()); this.tunnel = {pid: obj.pid}; var data = {}; - if(obj.stdout.length > 0) - data = JSON.parse(obj.stdout); - else if(obj.stderr.length > 0) - data = JSON.parse(obj.stderr); - else + if(obj.stdout.length > 0){ + try{ + data = JSON.parse(obj.stdout); + }catch(error){ + data = obj.stdout; + } + } else if(obj.stderr.length > 0){ + try{ + data = JSON.parse(obj.stderr); + }catch(error){ + data = obj.stderr; + } + } else { return new LocalError('No output received'); + } + if(typeof data === 'string'){ + return new LocalError('Malformed output received'); + } if(data['state'] != 'connected'){ return new LocalError(data['message']['message']); } else { @@ -93,21 +105,31 @@ function Local(){ that.retriesLeft -= 1; fs.unlinkSync(that.binaryPath); delete(that.binaryPath); - that.start(options, callback); - return; + return that.start(options, callback); } else { - callback(new LocalError(error.toString())); + return callback(new LocalError(error.toString())); } } var data = {}; - if(stdout) - data = JSON.parse(stdout); - else if(stderr) - data = JSON.parse(stderr); - else - callback(new LocalError('No output received')); - + if(stdout){ + try{ + data = JSON.parse(stdout); + }catch(error){ + data = stdout; + } + } else if(stderr){ + try{ + data = JSON.parse(stderr); + }catch(error){ + data = stderr; + } + } else { + return callback(new LocalError('No output received')); + } + if(typeof data === 'string'){ + return callback(new LocalError('Malformed output received')); + } if(data['state'] != 'connected'){ callback(new LocalError(data['message']['message'])); } else { @@ -126,7 +148,7 @@ function Local(){ this.stop = function (callback) { if(!this.pid) return callback(); this.killAllProcesses(function(error){ - if(error) callback(new LocalError(error.toString())); + if(error) return callback(new LocalError(error.toString())); callback(); }); }; @@ -316,6 +338,7 @@ function Local(){ this.killAllProcesses = function(callback){ psTree(this.pid, (err, children) => { + if(err) return callback(err); var childPids = children.map(val => val.PID); var killChecker = setInterval(() => { if(childPids.length === 0) {
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: