ID:               42682
 Comment by:       margus at zone dot ee
 Reported By:      Slig at free dot fr
 Status:           Open
 Bug Type:         Streams related
 Operating System: linux-64
 PHP Version:      5CVS-2007-10-11 (snap)
 New Comment:

Perhaps it helps if I give test results on different machines and where
and how it manifests:

stream_select() works flawlessly without patching on:
- my multiple 32bit machines. Those have SuSE90 or SuSE93 installed.
- my multiple 64bit SuSE10 machines

stream_select() works only when patched 'long this_fd;' or 'long
this_fd=0;' on:
- my multiple 64bit CentOS 4.5 systems (Xeon Quadcore)

stream_select() works only when patched 'long this_fd=0;'
(stream_select segfaults without variable initializing) on:
- my one 64bit CentOS 4.5 machine (Opteron Dualcore). 

Origin of this bug must be somewhere in php_stream_cast() or even
lower. I tried also compiling without OpenSSL support and yes, the bug
along with SSL socket support can be "eliminated" this way too :)


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

[2007-10-12 17:17:10] Slig at free dot fr

No, just setting it to 0 doesn't work.

And margus is true, using 'long this_fd;' it works (with or without
setting it to 0). I don't say it's the right solution, perhaps it's more
something to change in php_stream_cast(), i don't know.

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

[2007-10-12 10:20:28] [EMAIL PROTECTED]

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) {


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

[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  :(

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

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