From b2b95e4c717e3e7005a2a533840bce801ccf74bb Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Sat, 4 Jun 2011 13:10:41 -0700 Subject: [PATCH] Stop localised ties from becoming ro when COW --- mg.c | 2 +- t/op/tie.t | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) 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 -- 1.8.3.1