select: make Curl_socket_check take timediff_t timeout

Coverity found CID 1461718:

Integer handling issues (CONSTANT_EXPRESSION_RESULT) "timeout_ms >
9223372036854775807L" is always false regardless of the values of its
operands. This occurs as the logical second operand of "||".

Closes #5240
This commit is contained in:
Daniel Stenberg 2020-04-15 10:27:20 +02:00
parent b1b9692614
commit a96c7529eb
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
5 changed files with 11 additions and 11 deletions

View File

@ -147,8 +147,8 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
result = CURLE_OPERATION_TIMEDOUT; result = CURLE_OPERATION_TIMEDOUT;
break; break;
} }
if(!timeout_ms || timeout_ms > TIME_T_MAX) if(!timeout_ms)
timeout_ms = TIME_T_MAX; timeout_ms = TIMEDIFF_T_MAX;
/* Don't busyloop. The entire loop thing is a work-around as it causes a /* Don't busyloop. The entire loop thing is a work-around as it causes a
BLOCKING behavior which is a NO-NO. This function should rather be BLOCKING behavior which is a NO-NO. This function should rather be
@ -156,7 +156,7 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
possible to send now will be sent in the doing function repeatedly possible to send now will be sent in the doing function repeatedly
until the entire request is sent. until the entire request is sent.
*/ */
what = SOCKET_WRITABLE(sockfd, (time_t)timeout_ms); what = SOCKET_WRITABLE(sockfd, timeout_ms);
if(what < 0) { if(what < 0) {
result = CURLE_SEND_ERROR; result = CURLE_SEND_ERROR;
break; break;

View File

@ -201,7 +201,7 @@ int Curl_select(curl_socket_t maxfd,
int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */
curl_socket_t readfd1, curl_socket_t readfd1,
curl_socket_t writefd, /* socket to write to */ curl_socket_t writefd, /* socket to write to */
time_t timeout_ms) /* milliseconds to wait */ timediff_t timeout_ms) /* milliseconds to wait */
{ {
#ifdef HAVE_POLL_FINE #ifdef HAVE_POLL_FINE
struct pollfd pfd[3]; struct pollfd pfd[3];
@ -333,7 +333,7 @@ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */
curl_socket_t is unsigned in such cases and thus -1 is the largest curl_socket_t is unsigned in such cases and thus -1 is the largest
value). value).
*/ */
r = Curl_select(maxfd, &fds_read, &fds_write, &fds_err, timeout_ms); r = Curl_select(maxfd, &fds_read, &fds_write, &fds_err, (time_t)timeout_ms);
if(r < 0) if(r < 0)
return -1; return -1;

View File

@ -80,7 +80,7 @@ int Curl_select(curl_socket_t maxfd,
int Curl_socket_check(curl_socket_t readfd, curl_socket_t readfd2, int Curl_socket_check(curl_socket_t readfd, curl_socket_t readfd2,
curl_socket_t writefd, curl_socket_t writefd,
time_t timeout_ms); timediff_t timeout_ms);
#define SOCKET_READABLE(x,z) \ #define SOCKET_READABLE(x,z) \
Curl_socket_check(x, CURL_SOCKET_BAD, CURL_SOCKET_BAD, z) Curl_socket_check(x, CURL_SOCKET_BAD, CURL_SOCKET_BAD, z)
#define SOCKET_WRITABLE(x,z) \ #define SOCKET_WRITABLE(x,z) \

View File

@ -68,9 +68,9 @@ int Curl_blockread_all(struct connectdata *conn, /* connection data */
result = CURLE_OPERATION_TIMEDOUT; result = CURLE_OPERATION_TIMEDOUT;
break; break;
} }
if(!timeout_ms || timeout_ms > TIME_T_MAX) if(!timeout_ms)
timeout_ms = TIME_T_MAX; timeout_ms = TIME_T_MAX;
if(SOCKET_READABLE(sockfd, (time_t)timeout_ms) <= 0) { if(SOCKET_READABLE(sockfd, timeout_ms) <= 0) {
result = ~CURLE_OK; result = ~CURLE_OK;
break; break;
} }

View File

@ -1645,9 +1645,9 @@ schannel_send(struct connectdata *conn, int sockindex,
written = -1; written = -1;
break; break;
} }
if(!timeout_ms || timeout_ms > TIME_T_MAX) if(!timeout_ms)
timeout_ms = TIME_T_MAX; timeout_ms = TIMEDIFF_T_MAX;
what = SOCKET_WRITABLE(conn->sock[sockindex], (time_t)timeout_ms); what = SOCKET_WRITABLE(conn->sock[sockindex], timeout_ms);
if(what < 0) { if(what < 0) {
/* fatal error */ /* fatal error */
failf(conn->data, "select/poll on SSL socket, errno: %d", SOCKERRNO); failf(conn->data, "select/poll on SSL socket, errno: %d", SOCKERRNO);