ID:               32979
 Comment by:       stotty at tvnet dot hu
 Reported By:      mjpph at stardust dot fi
 Status:           Assigned
 Bug Type:         Streams related
 Operating System: Linux (Fedora Core 3)
 PHP Version:      5CVS-2006-01-18 (dev)
 Assigned To:      wez
 New Comment:

I have compared the original socket operations code, and the one in the
xp_ssl.x file, and it seems that even in the non-ssl path the code is
not identical. 

I have fixed four differences, two of which caused some functions to be
called twice, and two of which are casting to *(int*)

I do not claim to know the real cause for the bug, and how these
changes fix the problem, but they do, and they make the code more
consistent, and faster, so I think they should be committed.

Here is the patch that solves this problem form me (against 5.1.2)

------------------------cut here-----------------------
*** php-5.1.2/ext/openssl/xp_ssl.c      2006-01-01 13:50:10.000000000 +0100
--- php-5.1.2ssl/ext/openssl/xp_ssl.c   2006-01-31 23:00:58.000000000
+0100
***************
*** 188,194 ****
                } while(retry);
                
        } else {
!               didwrite = php_stream_socket_ops.write(stream, buf, count
TSRMLS_CC);
        }
        
        if (didwrite > 0) {
--- 188,195 ----
                } while(retry);
                
        } else {
!               didwrite = php_stream_socket_ops.write(stream, buf, count
TSRMLS_CC);     
!               return didwrite;
        }
        
        if (didwrite > 0) {
***************
*** 226,231 ****
--- 227,233 ----
        else
        {
                nr_bytes = php_stream_socket_ops.read(stream, buf, count
TSRMLS_CC);
+               return nr_bytes;
        }
  
        if (nr_bytes > 0) {
***************
*** 636,642 ****
  
                case PHP_STREAM_AS_FD_FOR_SELECT:
                        if (ret) {
!                               *ret = (void*)sslsock->s.socket;
                        }
                        return SUCCESS;
  
--- 638,644 ----
  
                case PHP_STREAM_AS_FD_FOR_SELECT:
                        if (ret) {
!                               *(int*)ret = (void*)sslsock->s.socket;
                        }
                        return SUCCESS;
  
***************
*** 646,652 ****
                                return FAILURE;
                        }
                        if (ret) {
!                               *ret = (void*)sslsock->s.socket;
                        }
                        return SUCCESS;
                default:
--- 648,654 ----
                                return FAILURE;
                        }
                        if (ret) {
!                               *(int*)ret = (void*)sslsock->s.socket;
                        }
                        return SUCCESS;
                default:

------------------------cut here-----------------------


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

[2006-01-30 09:41:28] stotty at tvnet dot hu

I've done some testing, and this bug is definitely triggered by 64 bit+
SSL support.

Bug triggers:
FC4 64 bit + PHP5.1.2 (configure --with-openssl)
FC4 64 bit + PHP 5.1Jan 29 snapshot (configure --with-openssl)

Bug does not trigger:
FC4 64 bit + PHP 5.1.2 (configure)
FC4 64 bit + PHP 5.1Jan29 snapshot (configure)
FC4 32 bit + PHP 5.1.2 (configure --with-openssl)
FC4 32 bit + PHP 5.0.4-10.5 (stock FC RPM)

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

[2006-01-17 23:08:59] mjpph at stardust dot fi

Doesn't work with the php5.1-200601172130.tar.gz snapshot nor with
5.1.2.

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

[2005-11-07 00:08:49] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php5-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5-win32-latest.zip



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

[2005-07-28 01:50:49] lew at mailduct dot com

wez -- the problems reported here are all due to a previously fixed bug
which has crept back into PHP.  It has to do with how the PHP library
treats EOF under FreeBSD vs Linux.

You worked on this problem previously...  please take a look at the
currently active Bug #32858 reported by me, as well as your prior fix
in Bug #25649.

Thanks....
Lew Payne

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

[2005-05-30 22:11:28] mjpph at stardust dot fi

I haven't had problems with different kernels. Only the combination of
x86_64, stream_socket_client() or stream_socket_server(),
stream_select() and PHP OpenSSL-support seem to reproduce this every
time.

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

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/32979

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

Reply via email to