ID:               42682
 Updated by:       [EMAIL PROTECTED]
 Reported By:      Slig at free dot fr
-Status:           Open
+Status:           Feedback
 Bug Type:         Streams related
 Operating System: linux-64
 PHP Version:      5CVS-2007-10-11 (snap)
 New Comment:

Try this patch (just manually change the 2 lines :):

Index: streamsfuncs.c
===================================================================
RCS file: /repository/php-src/ext/standard/streamsfuncs.c,v
retrieving revision 1.58.2.6.2.15.2.4
diff -u -a -r1.58.2.6.2.15.2.4 streamsfuncs.c
--- streamsfuncs.c      10 Oct 2007 12:58:41 -0000     
1.58.2.6.2.15.2.4
+++ streamsfuncs.c      12 Oct 2007 10:19:55 -0000
@@ -573,7 +573,7 @@
 {
        zval **elem;
        php_stream *stream;
-       php_socket_t this_fd;
+       php_socket_t this_fd = 0;
        int cnt = 0;
 
        if (Z_TYPE_P(stream_array) != IS_ARRAY) {
@@ -610,7 +610,7 @@
        zval **elem, **dest_elem;
        php_stream *stream;
        HashTable *new_hash;
-       php_socket_t this_fd;
+       php_socket_t this_fd = 0;
        int ret = 0;
 
        if (Z_TYPE_P(stream_array) != IS_ARRAY) {



Previous Comments:
------------------------------------------------------------------------

[2007-10-12 10:10:34] [EMAIL PROTECTED]

But it won't work in future. I tried to figure out why changing that
int to long would help but AFAICT it's really supposed to be int since
everything else using this_fd is expecting it to be int..

------------------------------------------------------------------------

[2007-10-11 18:50:17] margus at zone dot ee

I was hit by the same annoying bug (CentOS 4.5/x64/PHP5.1.6 & 5.2.3)

After debugging PHP stream_select() I found out that system's select()
returns correct number but this value get's mysteriously set to zero
(memory is overwritten?) a few steps before returning it to PHP script.


Anyway, the cure for me was to change an variable type from int to long
and explicitly reset it to 0. This patch works for both PHP 5.1 and
5.2:

--- ext/standard/streamsfuncs.c.orig    2007-10-09 16:21:30.000000000
+0300
+++ ext/standard/streamsfuncs.c 2007-10-09 16:21:41.000000000 +0300
@@ -608,7 +608,7 @@
        zval **elem, **dest_elem;
        php_stream *stream;
        HashTable *new_hash;
-       int this_fd, ret = 0;
+       long this_fd = 0, ret = 0;
 
        if (Z_TYPE_P(stream_array) != IS_ARRAY) {
                return 0;

------------------------------------------------------------------------

[2007-10-11 16:29:15] Slig at free dot fr

Sorry, still the same with the last snapshot on amd64/dual core xeon on
debian etch : it works without  --with-openssl  but don't work when
built using  --with-openssl  :(

------------------------------------------------------------------------

[2007-09-21 00:06:00] Slig at free dot fr

I tested today on a dual dual-core-xeon on current Fedora 7 x86_64,
first with current php and current openssl, then building php6 from the
source : same result, it give the expected result without openssl, but
return 0 when build with --with-openssl when there is a descriptor to
read.

Note: If i use as workaround 'while($nb>0 || count($r)>0){' and reduce
the read buffer ( fread($handle,30); for example), then i see that after
the first read the value returned by stream_select is ok... but it shows
another bug (#42720) :d

------------------------------------------------------------------------

[2007-09-19 08:26:27] Slig at free dot fr

OpenSSL on the tested computer: Architecture: amd64 , Version:
0.9.8c-4

I can try only on the same server with a different cpu (dual core xeon
and not quad core xeon) and another distro, but not sure when i'll have
time for that, i'll tell you the result here.

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/42682

-- 
Edit this bug report at http://bugs.php.net/?id=42682&edit=1

Reply via email to