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:
parent
e28760adff
commit
dcb28f0da5
2 changed files with 9 additions and 13 deletions
18
signal.c
18
signal.c
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue