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