Bug #78066 [Com]: PHP eats the first byte of a program that comes from process substitution
| From: | simon at ikanobori dot jp | Date: | Sat, 25 May 2019 16:53:55 +0000 |
| Subject: | Bug #78066 [Com]: PHP eats the first byte of a program that comes from process substitution | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-220988@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=78066&edit=1
ID: 78066
Comment by: simon at ikanobori dot jp
Reported by: octalbugsphp at alvarezp dot org
Summary: PHP eats the first byte of a program that comes from
process substitution
Status: Open
Type: Bug
Package: *General Issues
Operating System: Linux
PHP Version: 7.3.5
Block user comment: N
Private report: N
New Comment:
Being part of that discussion, it is important to note that process substitution returns the path to
an anonymous pipe which stops existing after the process finishes.
Previous Comments:
------------------------------------------------------------------------
[2019-05-25 16:52:01] octalbugsphp at alvarezp dot org
Description:
------------
PHP eats the first byte of a program that comes from process substitution
After discussion in ##php at Freenode this was found (see the third line, lseek)
$ strace php -f <(echo -- '<?php print("hello\n"); ?>') 2>&1 |
grep -A 5 'openat.*/dev/fd/63'
openat(AT_FDCWD, "/dev/fd/63", O_RDONLY) = 3
fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
read(3, "-- <?php print(\"hello\\n\"); ?>\n", 4096) = 30
lseek(3, 0, SEEK_SET) = -1 ESPIPE (Illegal seek)
lstat("/dev/fd/63", {st_mode=S_IFLNK|0500, st_size=64, ...}) = 0
readlink("/dev/fd/63", "pipe:[6195898]", 4096) = 14
Test script:
---------------
[ 0][Sat May 25 11:05:07 -0500 -- alvarezp@alvarezp-samsung:~]
$ php -f <(echo '<?php print("hello\n"); ?>')
?php print("hello\n"); ?>
[ 0][Sat May 25 11:05:11 -0500 -- alvarezp@alvarezp-samsung:~]
$ php -f <(echo ' <?php print("hello\n"); ?>')
hello
[ 0][Sat May 25 11:05:19 -0500 -- alvarezp@alvarezp-samsung:~]
$ php -f <(echo -- '<?php print("hello\n"); ?>')
- hello
Expected result:
----------------
The script should run as expected. The first byte should prevail as part of the script.
Actual result:
--------------
The first byte is eaten and not interpreted at all.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=78066&edit=1