From: Bo Lindbergh <2bfjdsla52kztwejndzdstsxl9athp@gmail.com> Date: Fri, 20 Jan 2012 02:15:05 +0000 (-0800) Subject: [perl #108398] Make PerlIO::scalar add null terminator X-Git-Tag: accepted/trunk/20130322.191538~1066 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8af88444359f912e4f4ff5726c58349bae916480;p=platform%2Fupstream%2Fperl.git [perl #108398] Make PerlIO::scalar add null terminator --- diff --git a/ext/PerlIO-scalar/scalar.xs b/ext/PerlIO-scalar/scalar.xs index 05a43ae..eac682b 100644 --- a/ext/PerlIO-scalar/scalar.xs +++ b/ext/PerlIO-scalar/scalar.xs @@ -166,26 +166,28 @@ PerlIOScalar_write(pTHX_ PerlIO * f, const void *vbuf, Size_t count) if (!SvROK(sv)) sv_force_normal(sv); if (SvOK(sv)) SvPV_force_nomg_nolen(sv); if ((PerlIOBase(f)->flags) & PERLIO_F_APPEND) { - dst = SvGROW(sv, SvCUR(sv) + count); + dst = SvGROW(sv, SvCUR(sv) + count + 1); offset = SvCUR(sv); s->posn = offset + count; } else { STRLEN const cur = SvCUR(sv); if (s->posn > cur) { - dst = SvGROW(sv, (STRLEN)s->posn + count); + dst = SvGROW(sv, (STRLEN)s->posn + count + 1); Zero(SvPVX(sv) + cur, (STRLEN)s->posn - cur, char); } - else if ((s->posn + count) > cur) - dst = SvGROW(sv, (STRLEN)s->posn + count); + else if ((s->posn + count) >= cur) + dst = SvGROW(sv, (STRLEN)s->posn + count + 1); else dst = SvPVX(sv); offset = s->posn; s->posn += count; } Move(vbuf, dst + offset, count, char); - if ((STRLEN) s->posn > SvCUR(sv)) + if ((STRLEN) s->posn > SvCUR(sv)) { SvCUR_set(sv, (STRLEN)s->posn); + dst[(STRLEN) s->posn] = 0; + } SvPOK_on(sv); SvSETMAGIC(sv); return count;