ruby-changes:48101
From: nobu <ko1@a...>
Date: Thu, 19 Oct 2017 20:24:07 +0900 (JST)
Subject: [ruby-changes:48101] nobu:r60215 (trunk): ruby.c: reject NUL in $0
nobu 2017-10-19 20:24:03 +0900 (Thu, 19 Oct 2017) New Revision: 60215 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=60215 Log: ruby.c: reject NUL in $0 * ruby.c (ruby_setproctitle): raise if the argument contains NUL char. process title is a NUL-terminated string. [ruby-core:82425] [Bug #13829] Modified files: trunk/ruby.c trunk/test/ruby/test_rubyoptions.rb Index: test/ruby/test_rubyoptions.rb =================================================================== --- test/ruby/test_rubyoptions.rb (revision 60214) +++ test/ruby/test_rubyoptions.rb (revision 60215) @@ -549,6 +549,13 @@ class TestRubyOptions < Test::Unit::Test https://github.com/ruby/ruby/blob/trunk/test/ruby/test_rubyoptions.rb#L549 def test_setproctitle skip "platform dependent feature" unless defined?(PSCMD) and PSCMD + assert_separately([], "#{<<-"{#"}\n#{<<-'};'}") + {# + assert_raise(ArgumentError) do + Process.setproctitle("hello\0") + end + }; + with_tmpchdir do write_file("test-script", "$_0 = $0.dup; Process.setproctitle('hello world'); $0 == $_0 or Process.setproctitle('$0 changed!'); sleep 60") Index: ruby.c =================================================================== --- ruby.c (revision 60214) +++ ruby.c (revision 60215) @@ -2052,6 +2052,8 @@ proc_argv0(VALUE process) https://github.com/ruby/ruby/blob/trunk/ruby.c#L2052 return rb_orig_progname; } +static VALUE ruby_setproctitle(VALUE title); + /* * call-seq: * Process.setproctitle(string) -> string @@ -2072,10 +2074,14 @@ proc_argv0(VALUE process) https://github.com/ruby/ruby/blob/trunk/ruby.c#L2074 static VALUE proc_setproctitle(VALUE process, VALUE title) { - StringValue(title); - - setproctitle("%.*s", RSTRING_LENINT(title), RSTRING_PTR(title)); + return ruby_setproctitle(title); +} +static VALUE +ruby_setproctitle(VALUE title) +{ + const char *ptr = StringValueCStr(title); + setproctitle("%.*s", RSTRING_LENINT(title), ptr); return title; } @@ -2085,7 +2091,7 @@ set_arg0(VALUE val, ID id) https://github.com/ruby/ruby/blob/trunk/ruby.c#L2091 if (origarg.argv == 0) rb_raise(rb_eRuntimeError, "$0 not initialized"); - rb_progname = rb_str_new_frozen(proc_setproctitle(rb_mProcess, val)); + rb_progname = rb_str_new_frozen(ruby_setproctitle(val)); } static inline VALUE -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/