Bug #70122 [Fbk->NoF]: stream_select() modifies array incorrectly if openssl is enabled

From: 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

« previous php.bugs (#229364) next »