From 8af88444359f912e4f4ff5726c58349bae916480 Mon Sep 17 00:00:00 2001 From: Bo Lindbergh <2bfjdsla52kztwejndzdstsxl9athp@gmail.com> Date: Thu, 19 Jan 2012 18:15:05 -0800 Subject: [PATCH] [perl #108398] Make PerlIO::scalar add null terminator --- ext/PerlIO-scalar/scalar.xs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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; -- 2.7.4