# New Ticket Created by  Zoffix Znet 
# Please include the string:  [perl #132258]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=132258 >


On Windows, cmd.exe has different quoting for arguments than CreateProcess() 
and according to a Microsoft's blog[^1] there's no one-size-fits all solution.

While run() will quote stuff just fine for non-cmd.exe programs, `perl6` 
executable on Windows is a batch file, which makes `run 'perl6', ...` go through
cmd.exe and its quoting, and it's possible to intro security issues:

    run $*EXECUTABLE, '-e', '"&whoami'; # executes `whoami` on the shell, as 
can be seen by output at the end

The same problem exists with Perl's system:

    system 'perl6', ('-e', '"" &whoami'); # executes `whoami` on the shell

So I'd assume the problem can't be solved entirely behind the scenes, precisely 
because there's no one-size-fits all solution.

However, even in Rakudo's own test suite there are `run`s that run 
$*EXECUTABLE, feeding it improperly quoted arguments.
It's not very obvious that `perl6` is a batch file and that it'd need special 
quoting.

So I think we need to:

1) Find a way to un-batch it. Make `perl6` a proper executable
2) Maybe add `:win-cmd-quoting` arg to `run` that will properly quote args for 
use with cmd.exe when we're running on Windows, so at least there's
    an easy options for users to use, if they so require


[1] 
https://blogs.msdn.microsoft.com/twistylittlepassagesallalike/2011/04/23/everyone-quotes-command-line-arguments-the-wrong-way/

Reply via email to