This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Use of strings with code points over 0xFF as arguments to "vec"
authorJames E Keenan <jkeenan@cpan.org>
Mon, 27 May 2019 02:30:40 +0000 (22:30 -0400)
committerJames E Keenan <jkeenan@cpan.org>
Thu, 30 May 2019 23:03:28 +0000 (19:03 -0400)
Implement scheduled fatalization.  Adapt existing tests in t/op/vec.t.
Eliminate t/lib/warnings/doop and move one test to t/op/vec.t.

Document this fatalization in perldiag and perlfunc.

Documentation improvement recommended by Karl Williamson.

For: RT # 134139

MANIFEST
doop.c
pod/perldeprecation.pod
pod/perldiag.pod
pod/perlfunc.pod
t/lib/warnings/doop [deleted file]
t/op/vec.t

index 4bc0500..6d49721 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -5468,7 +5468,6 @@ t/lib/warnings/9enabled           Tests warnings
 t/lib/warnings/9uninit         Tests "Use of uninitialized" warnings
 t/lib/warnings/av              Tests for av.c for warnings.t
 t/lib/warnings/doio            Tests for doio.c for warnings.t
-t/lib/warnings/doop            Tests for doop.c for warnings.t
 t/lib/warnings/gv              Tests for gv.c for warnings.t
 t/lib/warnings/hv              Tests for hv.c for warnings.t
 t/lib/warnings/malloc          Tests for malloc.c for warnings.t
diff --git a/doop.c b/doop.c
index 772c158..8b34171 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -763,10 +763,7 @@ Perl_do_vecget(pTHX_ SV *sv, STRLEN offset, int size)
             s = (unsigned char *) SvPV_flags(sv, srclen, svpv_flags);
         }
         else {
-            Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
-                                "Use of strings with code points over 0xFF as"
-                                " arguments to vec is deprecated. This will"
-                                " be a fatal error in Perl 5.32");
+               Perl_croak(aTHX_ "Use of strings with code points over 0xFF as arguments to vec is forbidden");
         }
     }
 
index 5213eca..d14c558 100644 (file)
@@ -54,7 +54,7 @@ This usage has been deprecated, and will no longer be allowed in Perl 5.32.
 
 C<vec> views its string argument as a sequence of bits.  A string
 containing a code point over 0xFF is nonsensical.  This usage is
-deprecated in Perl 5.28, and will be removed in Perl 5.32.
+deprecated in Perl 5.28, and was removed in Perl 5.32.
 
 =head3 Use of code points over 0xFF in string bitwise operators
 
index f69b1b8..11339f0 100644 (file)
@@ -7340,13 +7340,12 @@ operators treat their operands as strings of bytes, and values beyond
 
 This became fatal in Perl 5.28.
 
-=item Use of strings with code points over 0xFF as arguments to C<vec>
-is deprecated. This will be a fatal error in Perl 5.32
+=item Use of strings with code points over 0xFF as arguments to vec is forbidden
 
-(D deprecated) You tried to use L<C<vec>|perlfunc/vec EXPR,OFFSET,BITS>
+(F) You tried to use L<C<vec>|perlfunc/vec EXPR,OFFSET,BITS>
 on a string containing a code point over 0xFF, which is nonsensical here.
 
-Such usage will be a fatal error in Perl 5.32.
+This became fatal in Perl 5.32.
 
 =item Use of tainted arguments in %s is deprecated
 
index 196a88d..0e50132 100644 (file)
@@ -9669,10 +9669,8 @@ to try to write off the beginning of the string (i.e., negative OFFSET).
 If the string happens to be encoded as UTF-8 internally (and thus has
 the UTF8 flag set), L<C<vec>|/vec EXPR,OFFSET,BITS> tries to convert it
 to use a one-byte-per-character internal representation. However, if the
-string contains characters with values of 256 or higher, that conversion
-will fail, and a deprecation message will be raised.  In that situation,
-C<vec> will operate on the underlying buffer regardless, in its internal
-UTF-8 representation.  In Perl 5.32, this will be a fatal error.
+string contains characters with values of 256 or higher, a fatal error
+will occur.
 
 Strings created with L<C<vec>|/vec EXPR,OFFSET,BITS> can also be
 manipulated with the logical
diff --git a/t/lib/warnings/doop b/t/lib/warnings/doop
deleted file mode 100644 (file)
index 09db146..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-__END__
-# doop.c
-use utf8 ;
-$_ = "\x80  \xff" ;
-chop ;
-EXPECT
-########
-# NAME vec with above ff code points is deprecated
-my $foo = "\x{100}" . "\xff\xfe";
-eval { vec($foo, 1, 8) };
-no warnings 'deprecated';
-eval { vec($foo, 1, 8) };
-EXPECT
-Use of strings with code points over 0xFF as arguments to vec is deprecated. This will be a fatal error in Perl 5.32 at - line 2.
index d3bb57d..0e8b5ce 100644 (file)
@@ -10,6 +10,7 @@ use Config;
 
 plan(tests => 78);
 
+my $exception_134139 = "Use of strings with code points over 0xFF as arguments to vec is forbidden";
 
 is(vec($foo,0,1), 0);
 is(length($foo), undef);
@@ -65,18 +66,14 @@ $x = substr $foo, 1;
 is(vec($x, 0, 8), 255);
 $@ = undef;
 {
-    no warnings 'deprecated';
+    local $@;
     eval { vec($foo, 1, 8) };
-    ok(! $@);
+    like($@, qr/$exception_134139/,
+        "Caught exception: code point over 0xFF used as argument to vec");
     $@ = undef;
     eval { vec($foo, 1, 8) = 13 };
-    ok(! $@);
-    if ($::IS_EBCDIC) {
-        is($foo, "\x8c\x0d\xff\x8a\x69");
-    }
-    else {
-        is($foo, "\xc4\x0d\xc3\xbf\xc3\xbe");
-    }
+    like($@, qr/$exception_134139/,
+        "Caught exception: code point over 0xFF used as argument to vec");
 }
 $foo = "\x{100}" . "\xff\xfe";
 $x = substr $foo, 1;
@@ -244,3 +241,13 @@ like($@, qr/^Modification of a read-only value attempted at /,
     $v = eval { RT131083(1, vec($s, $off, 8)); };
     like($@, qr/Out of memory!/, "RT131083 lval ~0");
 }
+
+{
+    # Adapting test formerly in t/lib/warnings/doop
+
+    local $@;
+    my $foo = "\x{100}" . "\xff\xfe";
+    eval { vec($foo, 1, 8) };
+    like($@, qr/$exception_134139/,
+        "RT 134139: Use of strings with code points over 0xFF as arguments to 'vec' is now forbidden");
+}