[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]