Allow cow with $magic = $hashkey
authorFather Chrysostomos <sprout@cpan.org>
Fri, 26 Oct 2012 23:23:11 +0000 (16:23 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 27 Oct 2012 00:53:50 +0000 (17:53 -0700)
This was brought up in
<https://rt.perl.org/rt3/Ticket/Display.html?id=114820#txn-1165898>.

There is no reason we cannot assigned a shared hash key to a magical
scalar.  The only destination flag in CAN_COW_MASK that makes COW
assignment questionable is SVf_BREAK.  If such an assignment can hap-
pen (and I don’t believe it actually can), we will end up with unbal-
anced string table warnings.  So change the CAN_COW_MASK check to an
SVf_BREAK check.

sv.c

diff --git a/sv.c b/sv.c
index 050763e..4fb42bb 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -4189,7 +4189,7 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
                in a newer implementation.  */
             /* If we are COW and dstr is a suitable target then we drop down
                into the else and make dest a COW of us.  */
-            || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
+            || (SvFLAGS(dstr) & SVf_BREAK)
 #endif
             )
             &&