mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Merge branch 'PHP-8.4'
* PHP-8.4: Split off php_set_sock_blocking() and s.is_blocked to a separate function Fix missing checks against php_set_blocking() in xp_ssl.c
This commit is contained in:
@@ -1776,6 +1776,15 @@ static int php_openssl_capture_peer_certs(php_stream *stream,
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static zend_result php_openssl_set_blocking(php_openssl_netstream_data_t *sslsock, int block)
|
||||
{
|
||||
zend_result result = php_set_sock_blocking(sslsock->s.socket, block);
|
||||
if (EXPECTED(SUCCESS == result)) {
|
||||
sslsock->s.is_blocked = block;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static int php_openssl_enable_crypto(php_stream *stream,
|
||||
php_openssl_netstream_data_t *sslsock,
|
||||
php_stream_xport_crypto_param *cparam) /* {{{ */
|
||||
@@ -1804,8 +1813,7 @@ static int php_openssl_enable_crypto(php_stream *stream,
|
||||
sslsock->state_set = 1;
|
||||
}
|
||||
|
||||
if (SUCCESS == php_set_sock_blocking(sslsock->s.socket, 0)) {
|
||||
sslsock->s.is_blocked = 0;
|
||||
if (SUCCESS == php_openssl_set_blocking(sslsock, 0)) {
|
||||
/* The following mode are added only if we are able to change socket
|
||||
* to non blocking mode which is also used for read and write */
|
||||
SSL_set_mode(sslsock->ssl_handle, SSL_MODE_ENABLE_PARTIAL_WRITE | SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);
|
||||
@@ -1858,8 +1866,8 @@ static int php_openssl_enable_crypto(php_stream *stream,
|
||||
}
|
||||
} while (retry);
|
||||
|
||||
if (sslsock->s.is_blocked != blocked && SUCCESS == php_set_sock_blocking(sslsock->s.socket, blocked)) {
|
||||
sslsock->s.is_blocked = blocked;
|
||||
if (sslsock->s.is_blocked != blocked) {
|
||||
php_openssl_set_blocking(sslsock, blocked);
|
||||
}
|
||||
|
||||
if (n == 1) {
|
||||
@@ -1942,8 +1950,8 @@ static ssize_t php_openssl_sockop_io(int read, php_stream *stream, char *buf, si
|
||||
timeout = &sslsock->s.timeout;
|
||||
}
|
||||
|
||||
if (timeout && php_set_sock_blocking(sslsock->s.socket, 0) == SUCCESS) {
|
||||
sslsock->s.is_blocked = 0;
|
||||
if (timeout) {
|
||||
php_openssl_set_blocking(sslsock, 0);
|
||||
}
|
||||
|
||||
if (!sslsock->s.is_blocked && timeout && (timeout->tv_sec > 0 || (timeout->tv_sec == 0 && timeout->tv_usec))) {
|
||||
@@ -1967,8 +1975,7 @@ static ssize_t php_openssl_sockop_io(int read, php_stream *stream, char *buf, si
|
||||
if (php_openssl_compare_timeval(elapsed_time, *timeout) > 0 ) {
|
||||
/* If the socket was originally blocking, set it back. */
|
||||
if (began_blocked) {
|
||||
php_set_sock_blocking(sslsock->s.socket, 1);
|
||||
sslsock->s.is_blocked = 1;
|
||||
php_openssl_set_blocking(sslsock, 1);
|
||||
}
|
||||
sslsock->s.timeout_event = 1;
|
||||
return -1;
|
||||
@@ -2063,8 +2070,8 @@ static ssize_t php_openssl_sockop_io(int read, php_stream *stream, char *buf, si
|
||||
}
|
||||
|
||||
/* And if we were originally supposed to be blocking, let's reset the socket to that. */
|
||||
if (began_blocked && php_set_sock_blocking(sslsock->s.socket, 1) == SUCCESS) {
|
||||
sslsock->s.is_blocked = 1;
|
||||
if (began_blocked) {
|
||||
php_openssl_set_blocking(sslsock, 1);
|
||||
}
|
||||
|
||||
return 0 > nr_bytes ? 0 : nr_bytes;
|
||||
@@ -2370,8 +2377,8 @@ static int php_openssl_sockop_set_option(php_stream *stream, int option, int val
|
||||
timeout = &tv;
|
||||
}
|
||||
|
||||
if (timeout && php_set_sock_blocking(sslsock->s.socket, 0) == SUCCESS) {
|
||||
sslsock->s.is_blocked = 0;
|
||||
if (timeout) {
|
||||
php_openssl_set_blocking(sslsock, 0);
|
||||
}
|
||||
|
||||
if (!sslsock->s.is_blocked && timeout && (timeout->tv_sec > 0 || (timeout->tv_sec == 0 && timeout->tv_usec))) {
|
||||
@@ -2395,8 +2402,7 @@ static int php_openssl_sockop_set_option(php_stream *stream, int option, int val
|
||||
if (php_openssl_compare_timeval(elapsed_time, *timeout) > 0 ) {
|
||||
/* If the socket was originally blocking, set it back. */
|
||||
if (began_blocked) {
|
||||
php_set_sock_blocking(sslsock->s.socket, 1);
|
||||
sslsock->s.is_blocked = 1;
|
||||
php_openssl_set_blocking(sslsock, 1);
|
||||
}
|
||||
sslsock->s.timeout_event = 1;
|
||||
return PHP_STREAM_OPTION_RETURN_ERR;
|
||||
@@ -2447,8 +2453,7 @@ static int php_openssl_sockop_set_option(php_stream *stream, int option, int val
|
||||
|
||||
if (began_blocked && !sslsock->s.is_blocked) {
|
||||
// Set it back to blocking
|
||||
php_set_sock_blocking(sslsock->s.socket, 1);
|
||||
sslsock->s.is_blocked = 1;
|
||||
php_openssl_set_blocking(sslsock, 1);
|
||||
}
|
||||
} else {
|
||||
#ifdef PHP_WIN32
|
||||
|
||||
Reference in New Issue
Block a user