|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2017-03-15 14:55 UTC] kelunik@php.net
Description: ------------ If no STDIN exists, STDIN is still registered as FD 0 instead of a closed stream. This results in scripts without STDIN reading from /dev/urandom, because that's opened and just uses the next free FD. Instead of duplicating the FD in https://github.com/php/php-src/blob/16ae9f82e82e2aea5d7deaf8f9a9c825a56dfcc1/ext/standard/php_fopen_wrapper.c#L265 it should be registered as closed stream. See also https://github.com/reactphp/stream/issues/81. Test script: --------------- php -r 'var_dump(!!fstat(STDIN));passthru("ls -o /proc/".getmypid()."/fd");' <&- Expected result: ---------------- STDIN should be a closed stream instead of /dev/urandom Actual result: -------------- STDIN is /dev/urandom PatchesPull Requests
Pull requests:
HistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Dec 15 23:00:01 2025 UTC |
In fact, /dev/urandom is opened by some extension. With `./configure --disable-all` PHP segfaults with the same test case. $ sapi/cli/php -r 'var_dump(!!fstat(STDIN));passthru("ls -o /proc/".getmypid()."/fd");' <&- bool(false) insgesamt 0 lr-x------ 1 kelunik 64 Mär 16 12:51 0 -> pipe:[7290202] lrwx------ 1 kelunik 64 Mär 16 12:51 1 -> /dev/pts/1 lrwx------ 1 kelunik 64 Mär 16 12:51 2 -> /dev/pts/1 Speicherzugriffsfehler (Speicherabzug geschrieben)