From: Jarkko Hietaniemi Date: Sat, 27 Apr 2002 16:27:18 +0000 (+0000) Subject: Integrate perlio: X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=40d98b499c15c6fadd7a92e47cf92625dad3fb51;p=p5sagit%2Fp5-mst-13.2.git Integrate perlio: [ 16216] Fix weird warnings and/pr segfaults on binmode(,"encoding(...)") - if encoding loads Encode then stack grows. - pp_binmode was not allowing for that to happen - added PUTBACK/SPAGAIN. p4raw-link: @16216 on //depot/perlio: adb5c314284816e1c92cd8e29c9033c3ce18b580 p4raw-id: //depot/perl@16220 p4raw-integrated: from //depot/perlio@16219 'copy in' pp_sys.c (@16064..) --- diff --git a/pp_sys.c b/pp_sys.c index 03b1634..0183325 100644 --- a/pp_sys.c +++ b/pp_sys.c @@ -731,11 +731,16 @@ PP(pp_binmode) RETPUSHUNDEF; } + PUTBACK; if (PerlIO_binmode(aTHX_ fp,IoTYPE(io),mode_from_discipline(discp), - (discp) ? SvPV_nolen(discp) : Nullch)) + (discp) ? SvPV_nolen(discp) : Nullch)) { + SPAGAIN; RETPUSHYES; - else + } + else { + SPAGAIN; RETPUSHUNDEF; + } } PP(pp_tie) @@ -4040,7 +4045,7 @@ PP(pp_system) TAINT_ENV(); while (++MARK <= SP) { (void)SvPV_nolen(*MARK); /* stringify for taint check */ - if (PL_tainted) + if (PL_tainted) break; } MARK = ORIGMARK; @@ -4166,7 +4171,7 @@ PP(pp_exec) TAINT_ENV(); while (++MARK <= SP) { (void)SvPV_nolen(*MARK); /* stringify for taint check */ - if (PL_tainted) + if (PL_tainted) break; } MARK = ORIGMARK;