summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-02 04:04:30 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-02 04:04:30 +0000
commit76d1d5269f72e72e8fb39877bb1850aca823158d (patch)
tree893db691c0b42bfb7d8643ed8b4929123c5df741
parentba536e41549f694d5c7434edb967ee571b2161c2 (diff)
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
-rw-r--r--ChangeLog5
-rw-r--r--signal.c1
-rw-r--r--test/ruby/test_signal.rb9
3 files changed, 15 insertions, 0 deletions
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 <nobu@ruby-lang.org>
+
+ * signal.c (sig_signame): return nil if the argument is a valid
+ signal number.
+
Mon Mar 2 12:05:04 2015 Naohisa Goto <ngotogenome@gmail.com>
* 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", <<EOS, :err => File::NULL]) do |child|
Signal.trap("INT") do |signo|