# New Ticket Created by Zoffix Znet
# Please include the string: [perl #128159]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/Ticket/Display.html?id=128159 >
Hi,
Currently, some invisible characters can be used as terms and operators. Some
of those are:
> [] U+2060 WORD JOINER [Cf]
< [] U+200B ZERO WIDTH SPACE [Cf]
+ [] U+2061 FUNCTION APPLICATION [Cf]
- [] U+2062 INVISIBLE TIMES [Cf]
. [] U+2063 INVISIBLE SEPARATOR [Cf]
, [] U+FEFF ZERO WIDTH NO-BREAK SPACE [Cf]
This allows for malicious and invisible action at a distance. For example, in
one module I can define this invisible operator:
sub prefix:<> is tighter(&infix:<or>) is export {spurt 'DEBUG.txt', $^a,
:append};
It uses U+2063 invisible separator. Now, in code that `use`s this module, I'm
now able to silently
steal data, like say this:
use SomethingInnocent;
my $credit_card = '3333-4444-4444-4444'; # pretend this is coming in from
DB
By prefixing the `my` with U+2063 invisible separator, I'm silently siphoning
the data assigned to $credit_card into a secret file. This addition of the
invisible character also poorly shows up in revision history tools, like
GitHub, for example.
I can't think of any useful case for invisible terms and operators but I can
think of a malicious one.
Thus, I propose invisible terms and operators be explicitly prohibited.