From e79588fd40ab5175c7533179ece730677854bdab Mon Sep 17 00:00:00 2001 From: Austin Date: Mon, 15 Apr 2013 08:01:24 -0700 Subject: [PATCH] modified to use shellescape instead of gsub --- lib/foreman/process.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/foreman/process.rb b/lib/foreman/process.rb index a470d7e..2cd808f 100644 --- a/lib/foreman/process.rb +++ b/lib/foreman/process.rb @@ -1,4 +1,5 @@ require "foreman" +require "shellwords" class Foreman::Process @@ -47,24 +48,25 @@ class Foreman::Process def run(options={}) env = @options[:env].merge(options[:env] || {}) output = options[:output] || $stdout + runner = "#{Foreman.runner}".shellescape if Foreman.windows? Dir.chdir(cwd) do Process.spawn env, expanded_command(env), :out => output, :err => output end elsif Foreman.jruby_18? require "posix/spawn" - wrapped_command = "#{Foreman.runner} -d #{cwd} -p -- #{command}".gsub("'", "\\\\'") + wrapped_command = "#{runner} -d #{cwd.shellescape} -p -- #{command}" POSIX::Spawn.spawn env, wrapped_command, :out => output, :err => output elsif Foreman.ruby_18? fork do $stdout.reopen output $stderr.reopen output env.each { |k,v| ENV[k] = v } - wrapped_command = "#{Foreman.runner} -d #{cwd} -p -- #{command}".gsub("'", "\\\\'") + wrapped_command = "#{runner} -d #{cwd.shellescape} -p -- #{command}" Kernel.exec wrapped_command end else - wrapped_command = "#{Foreman.runner} -d #{cwd} -p -- #{command}".gsub("'", "\\\\'") + wrapped_command = "#{runner} -d #{cwd.shellescape} -p -- #{command}" Process.spawn env, wrapped_command, :out => output, :err => output end end