X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=doio.c;h=2b2caa519f83647f6938da271385bc30b4b49ff1;hb=bc8f2ddd12bfb4ed7885096cdab471dc8d1188aa;hp=7be7af114259833cb0feba6b8c20d9dcd5417197;hpb=fe13d51d6409065a0214793b416a2eb3fe209949;p=p5sagit%2Fp5-mst-13.2.git diff --git a/doio.c b/doio.c index 7be7af1..2b2caa5 100644 --- a/doio.c +++ b/doio.c @@ -1726,8 +1726,11 @@ nothing in the core. * CRTL's emulation of Unix-style signals and kill() */ while (++mark <= sp) { - I32 proc = SvIV(*mark); + I32 proc; register unsigned long int __vmssts; + if (!(SvIOK(*mark) || SvNOK(*mark) || looks_like_number(*mark))) + Perl_croak(aTHX_ "Can't kill a non-numeric process ID"); + proc = SvIV(*mark); APPLY_TAINT_PROPER(); if (!((__vmssts = sys$delprc(&proc,0)) & 1)) { tot--; @@ -1750,7 +1753,10 @@ nothing in the core. if (val < 0) { val = -val; while (++mark <= sp) { - const I32 proc = SvIV(*mark); + I32 proc; + if (!(SvIOK(*mark) || SvNOK(*mark) || looks_like_number(*mark))) + Perl_croak(aTHX_ "Can't kill a non-numeric process ID"); + proc = SvIV(*mark); APPLY_TAINT_PROPER(); #ifdef HAS_KILLPG if (PerlProc_killpg(proc,val)) /* BSD */ @@ -1762,7 +1768,10 @@ nothing in the core. } else { while (++mark <= sp) { - const I32 proc = SvIV(*mark); + I32 proc; + if (!(SvIOK(*mark) || SvNOK(*mark) || looks_like_number(*mark))) + Perl_croak(aTHX_ "Can't kill a non-numeric process ID"); + proc = SvIV(*mark); APPLY_TAINT_PROPER(); if (PerlProc_kill(proc, val)) tot--;