Branch: refs/heads/blead
  Home:   https://github.com/Perl/perl5
  Commit: 9a99c2bec339a81cc62c0d6a25c4e1343be0eaad
      
https://github.com/Perl/perl5/commit/9a99c2bec339a81cc62c0d6a25c4e1343be0eaad
  Author: Lukas Mai <lukasmai....@gmail.com>
  Date:   2024-07-31 (Wed, 31 Jul 2024)

  Changed paths:
    M t/io/pipe.t

  Log Message:
  -----------
  make tests pass when build directory name contains @ $ \ "

If you build and test perl from a directory whose name contains an `@`
sign (such as `/tmp/hello@world/perl5`), one of the tests in
`t/io/pipe.t` fails.

This is because it takes the path to the perl binary (which is
`/tmp/hello@world/perl5/perl` in our example) and interpolates it in
double-quotes into a string that is then eval'd and run (via
`fresh_perl()`). Thus the code that the interpreter in the child process
sees is:

    $Perl = "/tmp/hello@world/perl5/perl";

which of course tries to interpolate the (non-existent) `@world` array.
(Similar problems would be caused by paths containing `$` or `"`
characters).

Switching to single quotes, as in

    $Perl = '/tmp/hello@world/perl5/perl';

would fix this case, but would still be vulnerable to a path containing
`'` symbols.

Sidestep the problem by using `q` (to prevent variable interpolation)
with a NUL byte delimiter (which cannot occur in path names).

Found while investigating #22446.



To unsubscribe from these emails, change your notification settings at 
https://github.com/Perl/perl5/settings/notifications

Reply via email to