From 76d1d5269f72e72e8fb39877bb1850aca823158d Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 2 Mar 2015 04:04:30 +0000 Subject: signal.c: nil for invalid signum * signal.c (sig_signame): return nil if the argument is a valid signal number. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49801 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ signal.c | 1 + test/ruby/test_signal.rb | 9 +++++++++ 3 files changed, 15 insertions(+) diff --git a/ChangeLog b/ChangeLog index 2ae051a215..8e85676791 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Mar 2 13:04:27 2015 Nobuyoshi Nakada + + * signal.c (sig_signame): return nil if the argument is a valid + signal number. + Mon Mar 2 12:05:04 2015 Naohisa Goto * test/net/ftp/test_ftp.rb (create_ftp_server): set SO_OOBINLINE diff --git a/signal.c b/signal.c index fcfed8d42e..53e77d9ca4 100644 --- a/signal.c +++ b/signal.c @@ -257,6 +257,7 @@ static VALUE sig_signame(VALUE recv, VALUE signo) { const char *signame = signo2signm(NUM2INT(signo)); + if (!signame) return Qnil; return rb_str_new_cstr(signame); } diff --git a/test/ruby/test_signal.rb b/test/ruby/test_signal.rb index 4a59aa66c8..781045d30a 100644 --- a/test/ruby/test_signal.rb +++ b/test/ruby/test_signal.rb @@ -218,6 +218,15 @@ class TestSignal < Test::Unit::TestCase end def test_signame + Signal.list.each do |name, num| + assert_equal(num, Signal.list[Signal.signame(num)], name) + end + assert_nil(Signal.signame(-1)) + signums = Signal.list.invert + assert_nil(Signal.signame((1..1000).find {|num| !signums[num]})) + end + + def test_signame_delivered 10.times do IO.popen([EnvUtil.rubybin, "-e", < File::NULL]) do |child| Signal.trap("INT") do |signo| -- cgit v1.2.3