summaryrefslogtreecommitdiff
path: root/ext/PerlIO-scalar
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2013-10-25 06:26:16 -0700
committerFather Chrysostomos <sprout@cpan.org>2013-10-25 08:15:15 -0700
commit2b2b0f4f9cadf158191d00aa4da3a6b91c03a5df (patch)
treea0c8acc5948515ceb5f2060552e2d3b504fde2ea /ext/PerlIO-scalar
parent8c806578ce552b2f2b5c8ee6ec34c0105ab8f84c (diff)
downloadperl-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.xs1
-rw-r--r--ext/PerlIO-scalar/t/scalar.t8
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