diff options
author | Father Chrysostomos <sprout@cpan.org> | 2013-10-25 06:26:16 -0700 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2013-10-25 08:15:15 -0700 |
commit | 2b2b0f4f9cadf158191d00aa4da3a6b91c03a5df (patch) | |
tree | a0c8acc5948515ceb5f2060552e2d3b504fde2ea /ext/PerlIO-scalar | |
parent | 8c806578ce552b2f2b5c8ee6ec34c0105ab8f84c (diff) | |
download | perl-2b2b0f4f9cadf158191d00aa4da3a6b91c03a5df.tar.gz |
Make sure truncated in-memory files have trailing null
Just spotted this....
If the target scalar contains something already, then setting SvCUR to
0 is not sufficient.
Diffstat (limited to 'ext/PerlIO-scalar')
-rw-r--r-- | ext/PerlIO-scalar/scalar.xs | 1 | ||||
-rw-r--r-- | ext/PerlIO-scalar/t/scalar.t | 8 |
2 files changed, 7 insertions, 2 deletions
diff --git a/ext/PerlIO-scalar/scalar.xs b/ext/PerlIO-scalar/scalar.xs index fd8ac67d4b..552345dfce 100644 --- a/ext/PerlIO-scalar/scalar.xs +++ b/ext/PerlIO-scalar/scalar.xs @@ -55,6 +55,7 @@ PerlIOScalar_pushed(pTHX_ PerlIO * f, const char *mode, SV * arg, { sv_force_normal(s->var); SvCUR_set(s->var, 0); + if (SvPOK(s->var)) *SvPVX(s->var) = 0; } if (SvUTF8(s->var) && !sv_utf8_downgrade(s->var, TRUE)) { if (ckWARN(WARN_UTF8)) diff --git a/ext/PerlIO-scalar/t/scalar.t b/ext/PerlIO-scalar/t/scalar.t index 4de54f7ed0..a1d2b5354a 100644 --- a/ext/PerlIO-scalar/t/scalar.t +++ b/ext/PerlIO-scalar/t/scalar.t @@ -16,7 +16,7 @@ use Fcntl qw(SEEK_SET SEEK_CUR SEEK_END); # Not 0, 1, 2 everywhere. $| = 1; -use Test::More tests => 112; +use Test::More tests => 113; my $fh; my $var = "aaa\n"; @@ -340,7 +340,7 @@ sub has_trailing_nul(\$) { } SKIP: { if ($Config::Config{'extensions'} !~ m!\bPerlIO/scalar\b!) { - skip "no B", 3; + skip "no B", 4; } require B; @@ -359,6 +359,10 @@ SKIP: { print $fh "abc"; ok has_trailing_nul $memfile, 'write appends null when growing string after seek past end'; + + open $fh, ">", \($memfile = "hello"); + ok has_trailing_nul $memfile, + 'initial truncation in ">" mode provides trailing null'; } # [perl #112780] Cloning of in-memory handles |