mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Fixed php_socket_t to int conversion
This warning was about a possible loss of data due to the downcast of `php_socket_t` to `int`. The former maps to a platform specific type, hence, it might downcast from a 64 bit integer to a 32 bit intger.
Fixed possibly overflowing vars
Due to the change from `int` to `php_socket_t` some variables might overflow now. Changed all variables that might be affected.
Revert "Fixed possibly overflowing vars"
This reverts commit bf64fd5984.
Use aliased PHP socket type
Using the alias protects us from changes to the underlying type.
Removed ignored nfds argument
The `nfds` argument to the Win32 `select` function is always ignored, regardless of its actual value. Hence, we should not pass it in the first place. See https://msdn.microsoft.com/en-us/library/windows/desktop/ms740141(v=vs.85).aspx for reference.
Target value is not a pointer
Avoid overflow in loop
This commit is contained in:
committed by
Anatol Belski
parent
fb6e718764
commit
5fa1cd224b
@@ -248,7 +248,7 @@ static void print_extensions(void) /* {{{ */
|
||||
#define STDERR_FILENO 2
|
||||
#endif
|
||||
|
||||
static inline int sapi_cli_select(int fd)
|
||||
static inline int sapi_cli_select(php_socket_t fd)
|
||||
{
|
||||
fd_set wfd, dfd;
|
||||
struct timeval tv;
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
* - Calling this with NULL sets as a portable way to sleep with sub-second
|
||||
* accuracy is not supported.
|
||||
* */
|
||||
PHPAPI int php_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv)
|
||||
PHPAPI int php_select(php_socket_t max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv)
|
||||
{
|
||||
ULONGLONG ms_total, limit;
|
||||
HANDLE handles[MAXIMUM_WAIT_OBJECTS];
|
||||
@@ -61,7 +61,7 @@ PHPAPI int php_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, stru
|
||||
FD_ZERO(&sock_except);
|
||||
|
||||
/* build an array of handles for non-sockets */
|
||||
for (i = 0; i < max_fd; i++) {
|
||||
for (i = 0; i < INT_MAX && i < max_fd; i++) {
|
||||
if (SAFE_FD_ISSET(i, rfds) || SAFE_FD_ISSET(i, wfds) || SAFE_FD_ISSET(i, efds)) {
|
||||
handles[n_handles] = (HANDLE)(zend_uintptr_t)_get_osfhandle(i);
|
||||
if (handles[n_handles] == INVALID_HANDLE_VALUE) {
|
||||
@@ -87,7 +87,7 @@ PHPAPI int php_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, stru
|
||||
|
||||
if (n_handles == 0) {
|
||||
/* plain sockets only - let winsock handle the whole thing */
|
||||
return select(max_fd, rfds, wfds, efds, tv);
|
||||
return select(0, rfds, wfds, efds, tv);
|
||||
}
|
||||
|
||||
/* mixture of handles and sockets; lets multiplex between
|
||||
@@ -111,7 +111,7 @@ PHPAPI int php_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, stru
|
||||
tvslice.tv_sec = 0;
|
||||
tvslice.tv_usec = 100000;
|
||||
|
||||
retcode = select(sock_max_fd+1, &aread, &awrite, &aexcept, &tvslice);
|
||||
retcode = select(0, &aread, &awrite, &aexcept, &tvslice);
|
||||
}
|
||||
if (n_handles > 0) {
|
||||
/* check handles */
|
||||
|
||||
@@ -18,5 +18,6 @@
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
PHPAPI int php_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv);
|
||||
#include "php_network.h"
|
||||
|
||||
PHPAPI int php_select(php_socket_t max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv);
|
||||
|
||||
Reference in New Issue
Block a user