Bug #70122 [Fbk->NoF]: stream_select() modifies array incorrectly if openssl is enabled
| From: | php-bugs at lists dot php dot net | Date: | Sun, 04 Oct 2020 04:22:09 +0000 |
| Subject: | Bug #70122 [Fbk->NoF]: stream_select() modifies array incorrectly if openssl is enabled | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-229364@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=70122&edit=1
ID: 70122
Updated by: php-bugs@lists.php.net
Reported by: jake dot zatecky at gmail dot com
Summary: stream_select() modifies array incorrectly if openssl
is enabled
-Status: Feedback
+Status: No Feedback
Type: Bug
Package: Streams related
Operating System: Windows 7/Windows Server 2008
PHP Version: 5.6.11
Assigned To: cmb
Private report: N
New Comment:
No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Re-Opened". Thank you.
Previous Comments:
------------------------------------------------------------------------
[2020-09-22 09:39:08] cmb@php.net
Works for me as expected on Windows 10 with current PHP 7.3 and
7.4. Can you still reproduce the issue with any of the actively
supported PHP versions[1]?
[1] <https://www.php.net/supported-versions.php>
------------------------------------------------------------------------
[2015-07-23 23:47:55] jake dot zatecky at gmail dot com
Description:
------------
I have determined that the stream_select() function modifies the $read variable incorrectly when
php_openssl is loaded in more recent versions of PHP. For example, when running a listener with PHP
5.6.11 on port 8000 and using telnet, stream_select() returns the correct number of streams that
received connection (1), but both the $read and $write arrays returned are in fact empty.
This issue disappears if php_openssl is not loaded, or if you use PHP 5.6.6 (x64 thread-safe). There
are several related bugs, but it would appear that they address different issues.
I have verified this issue occurs identically on both PHP 5.6.9 and PHP 5.6.11 on a Windows 7
machine and Server 2008 R2 machine; it may occur on other operating systems as well. Both versions
are 64bit and thread-safe. I used the same .ini configuration on each of the three versions.
See the test code below to reproduce this behavior. Make sure php_openssl.dll is loaded, run the PHP
listener, and telnet the localhost port.
E.g.:
$ php listener.php
Then, in a separate terminal, run something similar to the following:
$ telnet localhost 8000
Test script:
---------------
<?php
$socket = stream_socket_server('tcp://0.0.0.0:8000', $errno, $errstr);
stream_set_blocking($socket, 0);
if (!$socket) {
echo "$errstr ($errno)\n";
} else {
$read = [$socket];
$write = [];
$except = null;
$num = stream_select($read, $write, $except, null, null);
// On PHP 5.6.9/5.6.11: int(1) and array(0) {}
// On PHP 5.6.6 : int(1) and array(1) { [0] => ... }
var_dump($num, $read);
fclose($socket);
}
Expected result:
----------------
The $read variable should contain one element:
array(1) {
[0]=>
resource(5) of type (stream)
}
This is returned using PHP 5.6.6 or when openssl is disabled.
Actual result:
--------------
On PHP 5.6.9 and PHP 5.6.11, when openssl is loaded, the following is outputted instead:
int(1)
array(0) {
}
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=70122&edit=1