1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

signal.c: check NUL bytes

* signal.c (trap_signm): check NUL bytes explicitly before raising
  "unsupported signal" ArgumentError.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62715 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2018-03-10 10:36:35 +00:00
parent e28760adff
commit dcb28f0da5
2 changed files with 9 additions and 13 deletions

View file

@ -1206,23 +1206,17 @@ trap_signm(VALUE vsig)
int sig = -1; int sig = -1;
const char *s; const char *s;
switch (TYPE(vsig)) { if (FIXNUM_P(vsig)) {
case T_FIXNUM:
sig = FIX2INT(vsig); sig = FIX2INT(vsig);
if (sig < 0 || sig >= NSIG) { if (sig < 0 || sig >= NSIG) {
rb_raise(rb_eArgError, "invalid signal number (%d)", sig); rb_raise(rb_eArgError, "invalid signal number (%d)", sig);
} }
break; }
else {
case T_SYMBOL: if (RB_SYMBOL_P(vsig)) {
vsig = rb_sym2str(vsig); vsig = rb_sym2str(vsig);
s = RSTRING_PTR(vsig); }
goto str_signal; s = StringValueCStr(vsig);
default:
s = StringValuePtr(vsig);
str_signal:
if (strncmp(signame_prefix, s, sizeof(signame_prefix)) == 0) if (strncmp(signame_prefix, s, sizeof(signame_prefix)) == 0)
s += 3; s += 3;
sig = signm2signo(s); sig = signm2signo(s);

View file

@ -164,6 +164,8 @@ class TestSignal < Test::Unit::TestCase
assert_raise(ArgumentError) { Signal.trap("XXXXXXXXXX", "SIG_DFL") } assert_raise(ArgumentError) { Signal.trap("XXXXXXXXXX", "SIG_DFL") }
assert_raise_with_message(ArgumentError, /\u{30eb 30d3 30fc}/) { Signal.trap("\u{30eb 30d3 30fc}", "SIG_DFL") } assert_raise_with_message(ArgumentError, /\u{30eb 30d3 30fc}/) { Signal.trap("\u{30eb 30d3 30fc}", "SIG_DFL") }
assert_raise(ArgumentError) { Signal.trap("EXIT\0") {} }
ensure ensure
Signal.trap(:INT, oldtrap) if oldtrap Signal.trap(:INT, oldtrap) if oldtrap
end end