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