mirror of
https://github.com/php/php-src.git
synced 2024-09-21 09:57:23 +00: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:
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);
|
||||
|
Loading…
Reference in New Issue
Block a user