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
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
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");
}
}
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
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
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
+++ /dev/null
-__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.
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);
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;
$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");
+}