wez Tue Mar 4 20:28:45 2003 EDT
Modified files: (Branch: PHP_4_3)
/php4/main network.c streams.c
Log:
Fix some signed/unsigned issues with read() and SSL_read() return values.
Allow SSL_connect() to retry for non-blocking sockets.
Correctly declare the char as unsigned for php_stream_getc(), as per
fgetc() semantics.
Index: php4/main/network.c
diff -u php4/main/network.c:1.83.2.3 php4/main/network.c:1.83.2.4
--- php4/main/network.c:1.83.2.3 Sat Feb 15 10:11:57 2003
+++ php4/main/network.c Tue Mar 4 20:28:45 2003
@@ -16,7 +16,7 @@
| Streams work by Wez Furlong <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: network.c,v 1.83.2.3 2003/02/15 15:11:57 wez Exp $ */
+/* $Id: network.c,v 1.83.2.4 2003/03/05 01:28:45 wez Exp $ */
/*#define DEBUG_MAIN_NETWORK 1*/
@@ -97,6 +97,10 @@
#include "ext/standard/file.h"
+#if HAVE_OPENSSL_EXT
+static int handle_ssl_error(php_stream *stream, int nr_bytes TSRMLS_DC);
+#endif
+
#ifdef PHP_WIN32
# define SOCK_ERR INVALID_SOCKET
# define SOCK_CONN_ERR SOCKET_ERROR
@@ -715,15 +719,20 @@
}
}
- if (activate) {
- if (SSL_connect(sock->ssl_handle) <= 0) {
+ if (activate) {
+ int err;
+
+ do {
+ err = SSL_connect(sock->ssl_handle);
+ } while (err != 1 && handle_ssl_error(stream, err TSRMLS_CC));
+
+ if (err != 1) {
php_error_docref(NULL TSRMLS_CC, E_WARNING,
"php_stream_sock_ssl_activate_with_method: SSL handshake/connection failed");
SSL_shutdown(sock->ssl_handle);
return FAILURE;
}
sock->ssl_active = activate;
- }
- else {
+ } else {
SSL_shutdown(sock->ssl_handle);
sock->ssl_active = 0;
}
@@ -827,10 +836,10 @@
memcpy(wptr, esbuf, code + 1);
wptr += code;
}
-
+
php_error_docref(NULL TSRMLS_CC, E_WARNING,
"SSL operation failed with code %d.%s%s",
- err,
+ err,
ebuf ? "OpenSSL Error messages:\n" : "",
ebuf ? ebuf : "");
@@ -845,7 +854,7 @@
static size_t php_sockop_write(php_stream *stream, const char *buf, size_t count
TSRMLS_DC)
{
php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract;
- size_t didwrite;
+ int didwrite;
#if HAVE_OPENSSL_EXT
if (sock->ssl_active) {
@@ -927,7 +936,7 @@
static size_t php_sockop_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
{
php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract;
- size_t nr_bytes = 0;
+ int nr_bytes = 0;
#if HAVE_OPENSSL_EXT
if (sock->ssl_active) {
Index: php4/main/streams.c
diff -u php4/main/streams.c:1.125.2.35 php4/main/streams.c:1.125.2.36
--- php4/main/streams.c:1.125.2.35 Tue Mar 4 11:20:24 2003
+++ php4/main/streams.c Tue Mar 4 20:28:45 2003
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: streams.c,v 1.125.2.35 2003/03/04 16:20:24 iliaa Exp $ */
+/* $Id: streams.c,v 1.125.2.36 2003/03/05 01:28:45 wez Exp $ */
#define _GNU_SOURCE
#include "php.h"
@@ -637,7 +637,7 @@
PHPAPI int _php_stream_getc(php_stream *stream TSRMLS_DC)
{
- char buf;
+ unsigned char buf;
if (php_stream_read(stream, &buf, 1) > 0) {
return buf & 0xff;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php