summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2019-05-30 17:51:33 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2019-05-30 17:56:33 -0700
commit4c955af9f7f490aff6db5efcfc5beceb882045b1 (patch)
tree52e5da54c92faeed4b83a39f143af2b4a2d6b0d0
parent35f1d3636974838cd623c65f18b861fa2d16b777 (diff)
downloadmixlib-shellout-lcg/windows-array-args2.tar.gz
Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
-rw-r--r--lib/mixlib/shellout/windows.rb13
-rw-r--r--spec/mixlib/shellout/windows_spec.rb4
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/mixlib/shellout/windows.rb b/lib/mixlib/shellout/windows.rb
index 27adbbd..a42a30e 100644
--- a/lib/mixlib/shellout/windows.rb
+++ b/lib/mixlib/shellout/windows.rb
@@ -66,7 +66,7 @@ module Mixlib
#
# Set cwd, environment, appname, etc.
#
- app_name, command_line = command_to_run(command)
+ app_name, command_line = command_to_run(combine_args(*command))
create_process_args = {
app_name: app_name,
command_line: command_line,
@@ -196,6 +196,17 @@ module Mixlib
true
end
+ def combine_args(*args)
+ return args if args.length == 1
+ args.map do |arg|
+ if arg.match(/[ \t\n\v"]/)
+ "\"#{arg}\""
+ else
+ arg
+ end
+ end.join(" ")
+ end
+
def command_to_run(command)
return run_under_cmd(command) if should_run_under_cmd?(command)
diff --git a/spec/mixlib/shellout/windows_spec.rb b/spec/mixlib/shellout/windows_spec.rb
index d4edabc..034f4e6 100644
--- a/spec/mixlib/shellout/windows_spec.rb
+++ b/spec/mixlib/shellout/windows_spec.rb
@@ -15,6 +15,10 @@ describe "Mixlib::ShellOut::Windows", :windows_only do
end
end
+ context "with arrays" do
+ with_command(%w{echo %PATH%}) { is_expected.to be_truthy }
+ end
+
context "when unquoted" do
with_command(%q{ruby -e 'prints "foobar"'}) { is_expected.not_to be_truthy }