This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix garbage output from ‘my $é’
authorFather Chrysostomos <sprout@cpan.org>
Sat, 13 Dec 2014 20:35:08 +0000 (12:35 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 13 Dec 2014 21:08:01 +0000 (13:08 -0800)
commitf6a1dc93bb4dd02b5c9a976f72a2fb5e2877630c
treede48ca175ead8698c8d200607a19754a0ee7d6f0
parent43a5423f48edfa8f5da5e978f1463d639509622e
Fix garbage output from ‘my $é’

$ echo 'my $é' | iconv -f utf-8 -t iso-8859-1 | ./perl -Ilib -CS
Can't use global $^ÿ\80\8f¿¿¿¿¿¿¿¿¾© in "my" at - line 1, at end of line

In trying to turn the é into a ^X sequence, alloc_my does toCTRL()
(^64) on it, where the character is treated as a signed inte-
ger, i.e., -23 ^ 64, or -87.  In sv_vcatpvfn_flags, it gets
cast to a UV, so it becomes 18446744073709551529 on 64-bit
platforms. Encoded in ‘extended’ UTF8, that becomes
<FF><80><8F><BF><BF><BF><BF><BF><BF><BF><BF><BE><A9> (assuming I cop-
ied and pasted it from less correctly), which only perl recognizes as
chr 18446744073709551529.

We should not be trying to do $^X on non-ASCII characters.
op.c
t/lib/croak/op