1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-23 08:38:49 -05:00

multi: Change curl_multi_wait/poll to error on negative timeout

- Add new error CURLM_BAD_FUNCTION_ARGUMENT and return that error when
  curl_multi_wait/poll is passed timeout param < 0.

Prior to this change passing a negative value to curl_multi_wait/poll
such as -1 could cause the function to wait forever.

Reported-by: hamstergene@users.noreply.github.com

Fixes https://github.com/curl/curl/issues/4763

Closes https://github.com/curl/curl/pull/4765
This commit is contained in:
Jay Satiro 2019-12-27 23:39:24 -05:00
parent ea6d6205d9
commit b700662b1c
7 changed files with 17 additions and 4 deletions

View File

@ -147,7 +147,7 @@ Function not found. A required zlib function was not found.
.IP "CURLE_ABORTED_BY_CALLBACK (42)" .IP "CURLE_ABORTED_BY_CALLBACK (42)"
Aborted by callback. A callback returned "abort" to libcurl. Aborted by callback. A callback returned "abort" to libcurl.
.IP "CURLE_BAD_FUNCTION_ARGUMENT (43)" .IP "CURLE_BAD_FUNCTION_ARGUMENT (43)"
Internal error. A function was called with a bad parameter. A function was called with a bad parameter.
.IP "CURLE_INTERFACE_FAILED (45)" .IP "CURLE_INTERFACE_FAILED (45)"
Interface error. A specified outgoing interface could not be used. Set which Interface error. A specified outgoing interface could not be used. Set which
interface to use for outgoing connections' source IP address with interface to use for outgoing connections' source IP address with
@ -299,6 +299,8 @@ second time. (Added in 7.32.1)
An API function was called from inside a callback. An API function was called from inside a callback.
.IP "CURLM_WAKEUP_FAILURE (9)" .IP "CURLM_WAKEUP_FAILURE (9)"
Wakeup is unavailable or failed. Wakeup is unavailable or failed.
.IP "CURLM_BAD_FUNCTION_ARGUMENT (10)"
A function was called with a bad parameter.
.SH "CURLSHcode" .SH "CURLSHcode"
The "share" interface will return a CURLSHcode to indicate when an error has The "share" interface will return a CURLSHcode to indicate when an error has
occurred. Also consider \fIcurl_share_strerror(3)\fP. occurred. Also consider \fIcurl_share_strerror(3)\fP.

View File

@ -334,6 +334,7 @@ CURLMSG_DONE 7.9.6
CURLMSG_NONE 7.9.6 CURLMSG_NONE 7.9.6
CURLM_ADDED_ALREADY 7.32.1 CURLM_ADDED_ALREADY 7.32.1
CURLM_BAD_EASY_HANDLE 7.9.6 CURLM_BAD_EASY_HANDLE 7.9.6
CURLM_BAD_FUNCTION_ARGUMENT 7.69.0
CURLM_BAD_HANDLE 7.9.6 CURLM_BAD_HANDLE 7.9.6
CURLM_BAD_SOCKET 7.15.4 CURLM_BAD_SOCKET 7.15.4
CURLM_CALL_MULTI_PERFORM 7.9.6 CURLM_CALL_MULTI_PERFORM 7.9.6

View File

@ -72,7 +72,8 @@ typedef enum {
attempted to get added - again */ attempted to get added - again */
CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a
callback */ callback */
CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */ CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */
CURLM_BAD_FUNCTION_ARGUMENT, /* function called with a bad parameter */
CURLM_LAST CURLM_LAST
} CURLMcode; } CURLMcode;

View File

@ -1048,6 +1048,9 @@ static CURLMcode Curl_multi_wait(struct Curl_multi *multi,
if(multi->in_callback) if(multi->in_callback)
return CURLM_RECURSIVE_API_CALL; return CURLM_RECURSIVE_API_CALL;
if(timeout_ms < 0)
return CURLM_BAD_FUNCTION_ARGUMENT;
/* Count up how many fds we have from the multi handle */ /* Count up how many fds we have from the multi handle */
data = multi->easyp; data = multi->easyp;
while(data) { while(data) {

View File

@ -392,6 +392,9 @@ curl_multi_strerror(CURLMcode error)
case CURLM_WAKEUP_FAILURE: case CURLM_WAKEUP_FAILURE:
return "Wakeup is unavailable or failed"; return "Wakeup is unavailable or failed";
case CURLM_BAD_FUNCTION_ARGUMENT:
return "A libcurl function was given a bad argument";
case CURLM_LAST: case CURLM_LAST:
break; break;
} }

View File

@ -1816,7 +1816,9 @@
d c 8 d c 8
d CURLM_WAKEUP_FAILURE... d CURLM_WAKEUP_FAILURE...
d c 9 d c 9
d CURLM_LAST c 10 d CURLM_BAD_FUNCTION_ARGUMENT...
d c 10
d CURLM_LAST c 11
* *
d CURLMSG s 10i 0 based(######ptr######) Enum d CURLMSG s 10i 0 based(######ptr######) Enum
d CURLMSG_NONE c 0 d CURLMSG_NONE c 0

View File

@ -140,7 +140,8 @@ m6: Unknown option
m7: The easy handle is already added to a multi handle m7: The easy handle is already added to a multi handle
m8: API function called from within callback m8: API function called from within callback
m9: Wakeup is unavailable or failed m9: Wakeup is unavailable or failed
m10: Unknown error m10: A libcurl function was given a bad argument
m11: Unknown error
s0: No error s0: No error
s1: Unknown share option s1: Unknown share option
s2: Share currently in use s2: Share currently in use