diff options
author | Daniel Stenberg <daniel@haxx.se> | 2020-04-15 10:27:20 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2020-04-23 15:57:23 +0200 |
commit | a96c7529eb31498a464910935a7d1a5e88ce3914 (patch) | |
tree | fbdbc3fbdcd5eb701cdd7946e93edaa46d48cf77 | |
parent | b1b96926148758c6a8de0898269c11b0e555ed66 (diff) |
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
-rw-r--r-- | lib/gopher.c | 6 | ||||
-rw-r--r-- | lib/select.c | 4 | ||||
-rw-r--r-- | lib/select.h | 2 | ||||
-rw-r--r-- | lib/socks.c | 4 | ||||
-rw-r--r-- | lib/vtls/schannel.c | 6 |
5 files changed, 11 insertions, 11 deletions
diff --git a/lib/gopher.c b/lib/gopher.c index 4216e6136..c48098f75 100644 --- a/lib/gopher.c +++ b/lib/gopher.c @@ -147,8 +147,8 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done) result = CURLE_OPERATION_TIMEDOUT; break; } - if(!timeout_ms || timeout_ms > TIME_T_MAX) - timeout_ms = TIME_T_MAX; + if(!timeout_ms) + timeout_ms = TIMEDIFF_T_MAX; /* 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 @@ -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 until the entire request is sent. */ - what = SOCKET_WRITABLE(sockfd, (time_t)timeout_ms); + what = SOCKET_WRITABLE(sockfd, timeout_ms); if(what < 0) { result = CURLE_SEND_ERROR; break; diff --git a/lib/select.c b/lib/select.c index 857e7f698..d91b20a4b 100644 --- a/lib/select.c +++ b/lib/select.c @@ -201,7 +201,7 @@ int Curl_select(curl_socket_t maxfd, int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */ curl_socket_t readfd1, 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 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 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) return -1; diff --git a/lib/select.h b/lib/select.h index 2667d0ccf..0fd8ed515 100644 --- a/lib/select.h +++ b/lib/select.h @@ -80,7 +80,7 @@ int Curl_select(curl_socket_t maxfd, int Curl_socket_check(curl_socket_t readfd, curl_socket_t readfd2, curl_socket_t writefd, - time_t timeout_ms); + timediff_t timeout_ms); #define SOCKET_READABLE(x,z) \ Curl_socket_check(x, CURL_SOCKET_BAD, CURL_SOCKET_BAD, z) #define SOCKET_WRITABLE(x,z) \ diff --git a/lib/socks.c b/lib/socks.c index dfd944ef3..18affbc96 100644 --- a/lib/socks.c +++ b/lib/socks.c @@ -68,9 +68,9 @@ int Curl_blockread_all(struct connectdata *conn, /* connection data */ result = CURLE_OPERATION_TIMEDOUT; break; } - if(!timeout_ms || timeout_ms > TIME_T_MAX) + if(!timeout_ms) timeout_ms = TIME_T_MAX; - if(SOCKET_READABLE(sockfd, (time_t)timeout_ms) <= 0) { + if(SOCKET_READABLE(sockfd, timeout_ms) <= 0) { result = ~CURLE_OK; break; } diff --git a/lib/vtls/schannel.c b/lib/vtls/schannel.c index dce6242da..49659bb7a 100644 --- a/lib/vtls/schannel.c +++ b/lib/vtls/schannel.c @@ -1645,9 +1645,9 @@ schannel_send(struct connectdata *conn, int sockindex, written = -1; break; } - if(!timeout_ms || timeout_ms > TIME_T_MAX) - timeout_ms = TIME_T_MAX; - what = SOCKET_WRITABLE(conn->sock[sockindex], (time_t)timeout_ms); + if(!timeout_ms) + timeout_ms = TIMEDIFF_T_MAX; + what = SOCKET_WRITABLE(conn->sock[sockindex], timeout_ms); if(what < 0) { /* fatal error */ failf(conn->data, "select/poll on SSL socket, errno: %d", SOCKERRNO); |