From 56e04a766185949119c93e963353f9a8712b8ec1 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Sat, 10 Aug 2013 16:28:40 -0700 Subject: =?UTF-8?q?op.c:ck=5Fsvconst:=20Don=E2=80=99t=20allow=20ro=20COWs?= =?UTF-8?q?=20under=20old=20COW?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Under PERL_OLD_COPY_ON_WRITE, allowing COWs to become read-only will complicate things elsewhere. It uses the IV slot of an SV to point to a loop of SVs sharing the same buffer. sv_2iv cannot cache the IV without running the SV through sv_force_normal, but that will croak on read-only values. I could change it to S_sv_uncow, but there are more cases elsewhere that would have to be audited, I don’t think it’s worth spending time on improving PERL_OLD_COPY_ON_WRITE as it’s ‘dead code, never intended to go live’ according to its author. I am bothering with at least this much because I don’t want to break it knowingly. --- lib/utf8.t | 9 --------- 1 file changed, 9 deletions(-) (limited to 'lib/utf8.t') diff --git a/lib/utf8.t b/lib/utf8.t index e6c94e6dc4..3978187264 100644 --- a/lib/utf8.t +++ b/lib/utf8.t @@ -565,17 +565,8 @@ for my $pos (0..5) { # [perl #119043] utf8::upgrade should not croak on read-only COWs for(__PACKAGE__) { - # First make sure we have a COW, otherwise this test is useless. - my $copy = $_; - my @addrs = unpack "L!L!", pack "pp", $copy, $_; - if ($addrs[0] != $addrs[1]) { - fail("__PACKAGE__ did not produce a COW - if this change was " - ."intentional, please provide me with another ro COW scalar") - } - else { eval { utf8::upgrade($_) }; is $@, "", 'no error with utf8::upgrade on read-only COW'; - } } # This one croaks, but not because the scalar is read-only eval "package \x{100};\n" . <<'END' -- cgit v1.2.1