aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--process.c4
-rw-r--r--test/ruby/test_system.rb16
2 files changed, 19 insertions, 1 deletions
diff --git a/process.c b/process.c
index 7a4fa3066e..0195a0fe23 100644
--- a/process.c
+++ b/process.c
@@ -2210,7 +2210,9 @@ rb_exec_fillarg(VALUE prog, int argc, VALUE *argv, VALUE env, VALUE opthash, VAL
}
}
eargp->invoke.cmd.argv_buf = argv_buf;
- eargp->invoke.cmd.command_name = hide_obj(rb_str_new_cstr(RSTRING_PTR(argv_buf)));
+ eargp->invoke.cmd.command_name =
+ hide_obj(rb_str_subseq(argv_buf, 0, strlen(RSTRING_PTR(argv_buf))));
+ rb_enc_copy(eargp->invoke.cmd.command_name, prog);
}
}
#endif
diff --git a/test/ruby/test_system.rb b/test/ruby/test_system.rb
index c56e2a13c4..edc70a4496 100644
--- a/test/ruby/test_system.rb
+++ b/test/ruby/test_system.rb
@@ -181,5 +181,21 @@ class TestSystem < Test::Unit::TestCase
assert_raise_with_message(RuntimeError, /\ACommand failed with exit /) do
system("'#{ruby}' -e abort", exception: true)
end
+
+ Dir.mktmpdir("ruby_script_tmp") do |tmpdir|
+ name = "\u{30c6 30b9 30c8}"
+ tmpfilename = "#{tmpdir}/#{name}.cmd"
+ message = /#{name}\.cmd/
+ e = assert_raise_with_message(Errno::ENOENT, message) do
+ system(tmpfilename, exception: true)
+ end
+ open(tmpfilename, "w") {|f|
+ f.puts "exit 127"
+ f.chmod(0755)
+ }
+ e = assert_raise_with_message(RuntimeError, message) do
+ system(tmpfilename, exception: true)
+ end
+ end
end
end