From 6fd04415db2bf6e25087c197b5cc4a95a7fbb7cb Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 19 Oct 2017 11:24:03 +0000 Subject: 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] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60215 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'ruby.c') diff --git a/ruby.c b/ruby.c index c26a5dd8de..e11f236870 100644 --- a/ruby.c +++ b/ruby.c @@ -2052,6 +2052,8 @@ proc_argv0(VALUE process) return rb_orig_progname; } +static VALUE ruby_setproctitle(VALUE title); + /* * call-seq: * Process.setproctitle(string) -> string @@ -2072,10 +2074,14 @@ proc_argv0(VALUE process) 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) 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 -- cgit v1.2.3