In perl.git, the branch blead has been updated <https://perl5.git.perl.org/perl.git/commitdiff/da5a0da22ef5f5dd64e1fcdcac2c5ed1c0398085?hp=c57372c9fa47e84c987c5804e5247ef5aea9a02d>
- Log ----------------------------------------------------------------- commit da5a0da22ef5f5dd64e1fcdcac2c5ed1c0398085 Author: James E Keenan <[email protected]> Date: Sun May 26 22:30:40 2019 -0400 Use of strings with code points over 0xFF as arguments to "vec" 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 ----------------------------------------------------------------------- Summary of changes: MANIFEST | 1 - doop.c | 5 +---- pod/perldeprecation.pod | 2 +- pod/perldiag.pod | 7 +++---- pod/perlfunc.pod | 6 ++---- t/lib/warnings/doop | 14 -------------- t/op/vec.t | 25 ++++++++++++++++--------- 7 files changed, 23 insertions(+), 37 deletions(-) delete mode 100644 t/lib/warnings/doop diff --git a/MANIFEST b/MANIFEST index 4bc05003a4..6d49721f86 100644 --- 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 772c158e1b..8b341713a5 100644 --- 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"); } } diff --git a/pod/perldeprecation.pod b/pod/perldeprecation.pod index 5213eca229..d14c55877f 100644 --- a/pod/perldeprecation.pod +++ b/pod/perldeprecation.pod @@ -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 diff --git a/pod/perldiag.pod b/pod/perldiag.pod index f69b1b8367..11339f0e9b 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -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 diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index 196a88d71f..0e50132907 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -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 index 09db146737..0000000000 --- a/t/lib/warnings/doop +++ /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. diff --git a/t/op/vec.t b/t/op/vec.t index d3bb57dcd7..0e8b5cee95 100644 --- a/t/op/vec.t +++ b/t/op/vec.t @@ -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"); +} -- Perl5 Master Repository
