From: Father Chrysostomos Date: Sat, 4 Jun 2011 20:10:41 +0000 (-0700) Subject: Stop localised ties from becoming ro when COW X-Git-Tag: accepted/trunk/20130322.191538~3951 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b2b95e4c717e3e7005a2a533840bce801ccf74bb;p=platform%2Fupstream%2Fperl.git Stop localised ties from becoming ro when COW --- diff --git a/mg.c b/mg.c index af2c647..bdded26 100644 --- a/mg.c +++ b/mg.c @@ -536,7 +536,7 @@ Perl_mg_localize(pTHX_ SV *sv, SV *nsv, bool setmagic) mg->mg_ptr, mg->mg_len); /* container types should remain read-only across localization */ - SvFLAGS(nsv) |= SvREADONLY(sv); + if (!SvIsCOW(sv)) SvFLAGS(nsv) |= SvREADONLY(sv); } if (SvTYPE(nsv) >= SVt_PVMG && SvMAGIC(nsv)) { diff --git a/t/op/tie.t b/t/op/tie.t index b485f62..0b53b14 100644 --- a/t/op/tie.t +++ b/t/op/tie.t @@ -1014,3 +1014,19 @@ print "ok\n"; EXPECT ok +######## +# +# Localising a tied COW scalar should not make it read-only. + +sub TIESCALAR { bless [] } +sub FETCH { __PACKAGE__ } +sub STORE {} +tie $x, ""; +"$x"; +{ + local $x; + $x = 3; +} +print "ok\n"; +EXPECT +ok